我在使用 PHP 记录的销毁带有 cookie 的会话的方法时遇到了麻烦。
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
这导致我看到 cookie 设置了两次:
Set-Cookie: SESSION_NAME=deleted; expires=Sat, 08-Jan-2011 14:09:10 GMT; path=/; secure
Set-Cookie: SESSION_NAME=1_4f09a3871d483; path=/
如 PHP 注释中所述,将 cookie 值设置为空 ('') 以外的值会删除“已删除”值,但保留第二个 cookie 集。
为了摆脱这种情况,我不得不添加上面建议的代码:
ini_set('session.use_cookies', '0');
我没有查看会话处理的源代码,但我的猜测是 setcookie(...) 绕过了会话模块,所以会话不知道我调用了它。所以,在我设置了一个已删除的 cookie 后,它正在设置一个默认 cookie。
我在 Mac 上测试:带有 Suhosin-Patch (cli) 的 PHP 5.3.6(构建时间:2011 年 9 月 8 日 19:34:00)