我对会话管理很困惑。我使用的是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
)。。你做到了吗?