繁体   English   中英

破坏旧的会话,使新的会话,但php仍指旧的会话

[英]destroying old session, making new, but php still refers to old session

花了我一段时间来解决这个问题的确切原因,但这似乎正在发生:

我开会 我想完全取消我的当前会话并从头开始,使用一个全新的会话,该会话具有空白状态。

所以这就是我要做的:

public function unregister_session()
{
    // I COMMENTED THOSE SECTIONS THAT I WASNT SURE WHAT THEY WERE DOING, BUT PROBLEM PERSISTS.
    //session_regenerate_id();
    //$params = session_get_cookie_params();
        // setcookie(session_name(), '', time() - 42000,
            // $params["path"], $params["domain"],
            // $params["secure"], $params["httponly"]);
    unset($_SESSION);
    $_SESSION=array();
    echo '<br> destroying session. old SID:'.session_id(); //echos 'qqhu7on0n...'
    session_unset();
    session_destroy();
    echo '<br> limbo SID:'.session_id(); //echos nothing.
    session_start();
    echo '<br> new SID:'.session_id();  //echos 'qqhu7on0n...'
}   

好吧,所以我认为应该进行的是我要召开新的会议。 这样做很好,因为至少在我看$_SESSION ,上一届会议的所有内容似乎都被遗忘了。

但是,每当我回显session_id时,它仍然给我旧的会话ID! 当我将任何值写入$ _SESSION时,它们不会被带到下一页,而是在下一页$_SESSION为空!

编辑:我在我脚本的多个位置(从上到下)回显session_id(),我总是显示相同的session_id。 进入Google开发人员工具查看我的Cookie,我看到了一个不同的PHPSESSID ID。 我在下一页上回显session_id()时会看到确切的ID ...

为什么会这样,我在做什么错? 如何获取session_id()向我显示新的会话ID,而不是旧的ID? 如何将值写到新的$ _SESSION变量中,以便将它们实际带到下一页?

编辑-解决方案

public function unregister_session()
{
    // DUNNO IF THE COMMENTED SECTIONS MAKE A DIFFERENCE
    //$params = session_get_cookie_params();
        // setcookie(session_name(), '', time() - 42000,
            // $params["path"], $params["domain"],
            // $params["secure"], $params["httponly"]);
    unset($_SESSION);
    $_SESSION=array();
    echo '<br> destroying session. old SID:'.session_id(); //echos 'qqhu7on0n...'
    session_unset();
    session_destroy();
    echo '<br> limbo SID:'.session_id(); //echos nothing.
    session_start();
    session_regenerate_id(TRUE); //THIS DOES THE TRICK! Calling it after session_start. Dunno if true makes a difference.
    echo '<br> new SID:'.session_id();  //echos '7b2jn...' :-)
}   

确保在正在调用该函数的任何页面上都调用session_start。 我还将取消注释销毁cookie的代码。 这样可以避免缓存数据出现怪异问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM