PHP - session_id没有指向正确的session_name

时间:2014-10-26 18:39:13

标签: php session cookies

我们正在使用一台服务器上有多个服务。因此,为了确保PHP会话不混合,我们希望为每个服务使用不同的cookie。我们创建了一个名为sec_session_start的函数,我们为此服务定义了cookie(mySession)。然后,我们创建了第二个名为start_my_session的函数来连接服务cookie。

每次我们尝试使用start_my_session时,它都会获取PHPSESSID内的信息,而不是mySession。我该如何解决这个问题。

以下功能仅在一个地方调用(当用户登录系统时)。

function sec_session_start() {
    $secure = false;
    $httponly = true;
    // Forces sessions to only use cookies.
    if (ini_set('session.use_only_cookies', 1) === FALSE) {
        header("Location: ../error.php?err=Could not initiate the safe session (ini_set)");
        exit();
    }
    $cookieParams = session_get_cookie_params();
    session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly);

    session_name('mySession');
    session_start();        // Start the PHP session.

    echo session_id();      // USE AT THE MOMENT FOR DEBUGGING ONLY
}

最后一条指令返回的会话ID是与mySession cookie对应的id。 (我检查了server / tmp文件夹和Chrome的资源调试器。)

用户登录后,在每个其他安全页面内调用以下函数。

function start_my_session() {
    echo session_name('mySession').'<br>';   // DEBUG : display PHPSESSID
    echo session_name().'<br>';              // DEBUG : display mySession
    session_start();        // Start the mySession

    echo session_id();                // DEBUG : display the PHPSESSID session id
}

正如评论中所提到的,session_id仍然指向PHPSESSID而不是mySession。

关于我们做错了什么以及我们如何解决它的任何建议?

1 个答案:

答案 0 :(得分:1)

这可能听起来不合逻辑,你会认为我是坚果但是:

在您使用session_name(...)切换会话名称之前(是的,这意味着它也会在会话开始之前!)...运行session_write_close();