IE8仅使用第一个会话cookie

时间:2012-01-30 23:46:02

标签: php session

有关此问题的一些背景信息:

我的域名采用以下格式: 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();
}

问题:如果我登录并注销,我尝试登录会话的任何其他时间都无法启动。这是为什么?

1 个答案:

答案 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。