【问题标题】:How to clear a session cookie [duplicate]如何清除会话 cookie [重复]
【发布时间】:2015-03-03 04:38:27
【问题描述】:

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

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

【问题讨论】:

  • 您还必须在注销页面中启动会话 (session_start)。您做到了吗?
  • cookie 必须通过将 cookie 设置为以前的时间来销毁。
  • @phpfresher - 就是这样。我没有意识到我需要这样做。如果您作为答案发布,我会接受。谢谢!
  • Hiii @Randall ...我在答案中添加了相同的内容...

标签: javascript php session cookies


【解决方案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

【讨论】:

  • 这篇文章很有帮助。谢谢!
【解决方案2】:

可能对你有帮助

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;

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 这是我的直接问题。谢谢!
    • 不客气 :) 祝你有美好的一天......
    猜你喜欢
    • 2014-01-03
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2010-11-08
    • 2022-01-03
    相关资源
    最近更新 更多