如何清除会话cookie

时间:2015-03-03 04:38:27

标签: javascript php session cookies

我对会话管理很困惑。我正在使用PHP,当用户点击登录按钮时,我将session_start()作为我脚本中的第一行。结果是客户端上的cookie名为PHPSESSID,具有唯一值。这看起来像我期望的那样有效。

我感到困惑的是注销过程。当用户点击“退出”时,我会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";
}

我只是误解了这个过程是如何运作的?或者我做错了什么(或者两者兼而有之!)。感谢您的任何建议或参考。

3 个答案:

答案 0 :(得分:1)

您还需要取消设置会话变量并终止cookie:

$_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

答案 1 :(得分: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;

答案 2 :(得分:0)

您必须在注销页面中启动会话(session_start)。 你做到了吗?