【发布时间】: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