我聽到了有關這個主題的混合回覆,那麼什麼是一個可靠的方法來銷燬PHP會話?真正銷燬PHP會話?
session_start();
if(isset($_SESSION['foo'])) {
unset($_SESSION['foo'];
...
}
session_destroy();
在最簡單的情況下,是否足以真正終止用戶和服務器之間的會話?
我聽到了有關這個主題的混合回覆,那麼什麼是一個可靠的方法來銷燬PHP會話?真正銷燬PHP會話?
session_start();
if(isset($_SESSION['foo'])) {
unset($_SESSION['foo'];
...
}
session_destroy();
在最簡單的情況下,是否足以真正終止用戶和服務器之間的會話?
要摧毀你應採取以下步驟會話:
要做到這一點,我'd use this:
session_start();
// resets the session data for the rest of the runtime
$_SESSION = array();
// sends as Set-Cookie to invalidate the session cookie
if (isset($_COOKIE[session_name()])) {
$params = session_get_cookie_params();
setcookie(session_name(), '', 1, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));
}
session_destroy();
爲了確保會話ID無效,您應該只允許由您的腳本啓動的會話ID。所以,設置一個標誌並檢查是否設置:
session_start();
if (!isset($_SESSION['CREATED'])) {
// invalidate old session data and ID
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
此外,您可以使用此時間戳來交換會話ID週期性地降低其使用壽命:
if (time() - $_SESSION['CREATED'] > ini_get('session.gc_maxlifetime')) {
session_regenerate_id(true);
$_SESSION['CREATED'] = time();
}
很好的反饋,謝謝你。 – 2009-02-03 21:59:29
在我使用PHP會話的一個站點中,我從來沒有真正銷燬會話。
問題是,你幾乎不得不打電話給session_start()
來檢查你的$_SESSION
變量,在這一點上,你瞧,你已經創建了另一個會話。
因此在我的地盤我只是確信每頁面調用session_start()
,然後就unset()
這個問題,當用戶註銷會話狀態的那些部分。
感謝您輸入Alnitak,這是我懷疑在每個頁面上調用session_start()。我將繼續使用它們來取消設置變量。 – 2009-02-03 21:46:04
PHP手冊解決了這個問題。
您需要終止會話並刪除會話cookie(如果您使用的是cookie)。
看到這個頁面(尤其是第一個例子):
看一看點擊:http:/ /stackoverflow.com/questions/10648565/destroying-php-session/10662060#10662060 – Brett 2012-05-20 06:38:28