我正在尝试解决网络应用的退出功能。当您登录时,该应用程序会为其域设置多个Cookie。这是当前的注销程序:
session_destroy()
的函数,并循环遍历域的所有Cookie并将它们设置为过去(请参阅下面的代码)在此过程结束时,所有其他Cookie都未设置,但PHPSESSID
Cookie仍然存在,具有相同的值,并且仍设置为在会话结束时到期。
我在这里缺少什么?
这是我上面提到的注销功能:
function log_out_current_user() {
// Destroy the session
if (isset($_SESSION)) {
session_destroy();
}
// Expire all of the user's cookies for this domain:
// give them a blank value and set them to expire
// in the past
if (isset($_SERVER['HTTP_COOKIE'])) {
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie) {
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, '/');
}
// Explicitly unset this cookie - shouldn't be redundant,
// but it doesn't hurt to try
setcookie('PHPSESSID', '', time()-1000);
}
}
答案 0 :(得分:31)
您没有使用与创建时相同的参数删除它。使用session_get_cookie_params
获取这些内容。要便于携带,您应该通过session_name
获取Cookie的名称。这是一个小脚本:
$params = session_get_cookie_params();
setcookie(session_name(), '', 0, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));