2015-03-03 137 views
0

我對會話管理很困惑。我使用的是PHP,當用戶點擊登錄按鈕時,我的電話號碼是session_start()作爲我的腳本中的第一行。這樣做的結果是客戶端上一個名爲PHPSESSID的cookie具有唯一的值。這似乎符合我的預期。如何清除會話cookie

我很困惑的地方就是註銷過程。當用戶點擊'註銷'時,我call session_unset();然後session_destroy();。我的期望是這應該清除cookie,但不是。即使當我關閉瀏覽器中的選項卡時,當我通過新選項卡返回網站時,該舊cookie仍然存在,以及舊的會話ID值。這意味着會話ID正在從一個會話重用到下一個(以及之後)。即使我再次通過登錄過程,會話ID仍保持不變。這不可能是正確的,對吧?

在一個有點絕望的嘗試,我試圖用這個功能來清除cookie自身,但它似乎一事無成:

// destroy the cookies 
var cookies = document.cookie.split(";"); 

for (var i = 0; i < cookies.length; i++) { 
    var cookie = cookies[i]; 
    var eqPos = cookie.indexOf("="); 
    var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; 
    document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"; 
} 

我是不是誤解這個過程是如何工作的?或者我做錯了什麼(或兩者都有!)。感謝您的任何建議或參考。

+0

你必須在註銷頁面開始會話('session_start')..你做了嗎? – phpfresher 2015-03-03 04:41:33

+0

Cookie必須通過將cookie設置爲前一次銷燬。 – arunrc 2015-03-03 04:42:42

+0

@phpfresher - 就是這樣。我沒有意識到我需要這樣做。如果您發佈答案,我會接受它。謝謝! – Alex 2015-03-03 04:43:27

回答

0

你必須開始在註銷頁面也.. 你做的會話(session_start)?

+0

這是我的直接問題。謝謝! – Alex 2015-03-03 04:56:10

+0

歡迎您:) 祝您有美好的一天... – phpfresher 2015-03-03 04:56:43

1

您還需要取消設置會話變量並殺死餅乾:

$_SESSION = array(); 

if (isset($_COOKIE[session_name()])) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', 1, $params['path'], $params['domain'], 
      $params['secure'], isset($params['httponly'])); 
} 

這個問題已經被廣泛here回答。

+0

這是一個有用的帖子。謝謝! – Alex 2015-03-03 04:45:01

1

它可以幫助你

session_start(); 
if (isset($_COOKIE['remember_user'])) { 
unset($_COOKIE['Hello']); 
unset($_COOKIE['HelloTest1']); 
setcookie('Hello', null, -1, '/'); 
setcookie('HelloTest1', null, -1, '/'); 
return true; 
} else { 
return false; 
} 
session_destroy(); 
header('Location:'); 
exit;