2013-02-06 31 views
0

我嘗試在php中寫入登錄頁面,但是我遇到了會話問題。PHP無法檢查會話是否正在運行

我有一個index.php文件,它應該顯示內部/登錄頁面。來源:

<?php 
include ("session_management.php"); 

if($_SESSION["UserID"] == -1) 
    include("login.php"); 
else 
    include("calendar.php"); 
?> 

我session_management.php看起來是這樣的:

<?php 

    if(session_status() == PHP_SESSION_ACTIVE) { 
     PRINT "session exists<br>"; 
     //session exists... 
    } 
    else { 
     session_start(); 
       PRINT "new session<br>"; 

     $_SESSION["Username"] = 0; 
     $_SESSION["UserID"] = -1; 
    } 
?> 

終於,我的login.php文件:

<?php 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     if (isset ($_POST["username"]) && isset ($_POST["pwd"]) 
       && $_POST["username"] != '' && $_POST["pwd"] != ''){ 
      $_SESSION["UserID"] = 1; 
      $_SESSION["Username"] = "abc"; 

     } 
     else 
      PRINT "need name AND pwd"; 
    } 
//.. some code... 

我不知道爲什麼不工作(用戶ID始終爲-1,也是登錄後,所以login.php始終顯示)

感謝您的幫助!

+0

爲了記錄在案:你的問題給出了一些代碼,但它似乎缺乏一個實際的問題。如果你給它添加一個問題會很方便。即:說什麼不工作,你期待什麼結果。 –

回答

0

session_status() == PHP_SESSION_ACTIVE總是返回false,因爲您在測試之前未執行session_start()。

你總是需要做一個session_start()。如果沒有收到會話cookie,它將啓動新會話,或者重新打開現有會話。

您session_management.php改成這樣:

<?php 
    session_start(); 
    if (empty($_SESSION["Username"])) $_SESSION["Username"] = 0; 
    if (empty($_SESSION["UserID"])) $_SESSION["UserID"] = -1; 
?> 

,它會工作。

如果你在某些時候真的要摧毀會議(註銷):

<?php 
    session_start(); 
    session_regenerate_id(true); 
?> 
+0

謝謝,那幫了我很多,現在有用! – user1885484

+0

沒問題。祝你好運! –