2011-08-08 56 views
2

目前我一直在$ _SESSION上測試變量,如果isset()返回false,則假定會話超時顯示登錄頁面。如何判斷PHP會話是否超時

session_start(); 

if (isset($_POST['login'])): 
    // Process login credentials 
    $_SESSION['account'] = Array('user'=>'username'); 
endif; 

if (! isset($_SESSION['account'])): 
    // User not logged in, show login page 
else: 
    // User is logged in, show account page 
endif; 

但是,用戶最近報告帳戶頁面是空白的。我假設沒有會話數據可用,因爲我上面的代碼有點瑕疵。有人能指出我正確的方向來正確測試會話是否已在PHP中超時?

+1

它可能是空白'$ _SESSION ['account']'變量的情況嗎?或者可能是它不包含預期值? – linuxeasy

+0

啊,你可能是對的!你促使我搜索剩餘的代碼,並且我發現'$ _SESSION ['account'] = Array();'(儘管它*以後會填充帳戶信息,也許這沒有發生)。上面的代碼其餘部分是否相當健壯呢? – Tak

+0

是的,它似乎是如此! – linuxeasy

回答

1

,如果你可以使用:

if (! isset($_SESSION['account']) && !empty($_SESSION['account'])): 
    // User not logged in, show login page 
else: 
    // User is logged in, show account page 
endif; 

所以這不會傳爲2個條件,

  1. 如果會議沒有設定

  2. 如果會話設置,但空!

仍的情況下,無效值的存在,例如,用戶名來xyz和你沒有匹配xyz任何記錄,那麼它可能是獲取任何記錄的情況下,因此它可能是空白呢!

所以不僅僅是這些陳述,您應該進一步檢查,如果$_POST中的數據與系統中的任何記錄匹配,並且只有在確認匹配之後,才應將其設置爲$_SESSION

這些應該涵蓋你的大部分情況,使逃生更少!