如何清除会话cookie


How to clear a session cookie

我对会话管理很困惑。我使用的是PHP,当用户单击登录按钮时,我调用session_start()作为脚本中的第一行。其结果是客户端上一个名为PHPSSID的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";
}

我只是误解了这个过程是如何运作的吗?或者我做错了什么(或者两者都有!)。感谢您的任何建议或推荐。

您还需要取消设置会话变量并终止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']));
}

这个问题在这里得到了广泛的回答。

它可能会帮助您

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;

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