如何清除会话 cookie

How to clear a session cookie

我对会话管理很困惑。我正在使用 PHP,当用户单击登录按钮时,我调用 session_start() 作为我脚本中的第一行。结果是客户端上的一个名为 PHPSESSID 的 cookie 具有唯一值。这似乎符合我的预期。

我感到困惑的地方是注销过程。当用户点击 'log out' 时,我 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']));
}

此问题已得到广泛回答 here

它可能对你有帮助

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).. 你做到了吗?