我对会话管理很困惑。我正在使用PHP,当用户点击登录按钮时,我将session_start()
作为我脚本中的第一行。结果是客户端上的cookie名为PHPSESSID,具有唯一值。这看起来像我期望的那样有效。
我感到困惑的是注销过程。当用户点击“退出”时,我会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";
}
我只是误解了这个过程是如何运作的?或者我做错了什么(或者两者兼而有之!)。感谢您的任何建议或参考。
答案 0 :(得分: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。
答案 1 :(得分:1)
它可以帮助你
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;
答案 2 :(得分:0)
您必须在注销页面中启动会话(session_start
)。
你做到了吗?