有关此问题的一些背景信息:
我的域名采用以下格式: http://example.com/
托管于:共享主机服务器。
保护模式:关闭。
应用程序遇到: IE8
应用程序不会受到: Chrome或FireFox。
我使用以下命令登录应用程序:
function login(){
session_regenerate_id();
$_SESSION['thumbprint']=nonce(session_id().'thumbprint',86400);
}
function nonce($str,$expires){
global $config;
return sha1(date('Y-m-d H:i',ceil(time()/$expires)*$expires).$salt.$str);
}
登录后,我注销:
function logout(){
session_unset();
session_destroy();
header("Location: http://example.com");
die();
}
问题:如果我登录并注销,我尝试登录会话的任何其他时间都无法启动。这是为什么?
答案 0 :(得分:1)
我最初有:
session_regenerate_id();
但根据PHP手册,这不会起作用:
“session_regenerate_id()将使用新会话ID替换当前会话ID,并保留当前会话信息。”
http://php.net/manual/en/function.session-regenerate-id.php
因为IE8:
“使用第一个会话cookie集,而不是Firefox中的最后一个。” http://anvilstudios.co.za/blog/php/session-cookies-faulty-in-ie8/
要解决此问题,您只需设置:
session_regenerate_id(true);
删除旧会话ID并强制IE8使用新会话ID。