2015-11-17 233 views
3

我想了解何時PHP會話將超時並強制用戶重新登錄回來。PHP會話超時/註銷

當該網站用戶首次登錄成功,我設置全局像這樣的會議:

$_SESSION['AcmeAuthenticated'] = TRUE; 

在其他每一頁我在頁面頂部檢查此:

if (!isset($_SESSION['AcmeAuthenticated']) and $_SESSION['AcmeAuthenticated'] !== TRUE) { 
header('Location: index.php'); 
die; 
} 

我注意到在開發過程中,我可以保持我的瀏覽器整天打開,它不會再要求我再次登錄。如果我退出瀏覽器,那麼它會提示我再次登錄。我檢查了PHP信息和session.gc_maxlifetime設置爲900 - 我是否認爲PHP會話將在15分鐘內結束?

我是PHP新手,所以仍試圖瞭解會話如何工作以及超時生效的時間。

+0

您應該使用適當的比較運算符 - '&&'而不是'和'。 – Darren

回答

0

當您退出瀏覽器時,它將清除所有會話。這就是爲什麼你每次退出瀏覽器時都必須重新登錄。但是,是的,您可以設置您希望SESSION持續多久。它向您展示瞭如何: How do I expire a PHP session after 30 minutes?

+0

這是一個絕不是真的絕殺。這取決於會話是由Cookie處理還是通過查詢字符串處理,在Cookie生存期以及客戶端是否在關閉時刪除Cookie(這是客戶端配置並且不在您的控制範圍內)。某些網站通過AJAX頻繁更新,所以每刷新一次,會話超時將被重置,但在瀏覽器窗口關閉後,該功能不會出現,因此會話將過期。 – syck

+0

@syck老兄,你瀏覽我的答案是什麼? – frosty

+0

只有一個。當我讀到你認爲縮進使腳本不易讀時,我感興趣的是你可能有多少編程經驗。 – syck

0

if的說法應該是:

if(!isset($_SESSION['AcmeAuthenticated']) && $_SESSION['AcmeAuthenticated'] !== true) 
{ 
    header('Location: index.php'); 
    die; 
} 

你應該需要使用&&而不是and。隨意使用session_set_cookie_params()來操縱會話cookie參數,但它聽起來像你的cookie是'會話'cookie;這就是爲什麼它在瀏覽器關閉後會消失。

0

當瀏覽器窗口關閉時,PHP會話結束[1]。

是的,session.gc_maxlifetime是以秒爲單位設置的,所以900是15分鐘。你可能想要達到約30,000(約8小時)。