首页 文章

摧毁旧会话,制作新的,但PHP仍然指旧会话

提问于
浏览
1

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

我有一个 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 的一切似乎都被遗忘了,至少如果我看一下 $_SESSION .

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

编辑:我在我的脚本上的多个地方回显session_id()(从上到下)我总是显示相同的session_id . 进入谷歌开发者工具查看我的cookie,我看到PHPSESSID的不同ID . 当我试图在下一页上回显session_id()时,我会看到确切的ID ...

Why is this happening and what am I doing wrong? How can I get session_id() to show me the NEW session id, not the old one? How can I write values into the NEW $_SESSION variable, so that they are actually carried over to the next page?

EDIT - THE SOLUTION

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...' :-)
}

2 回答

  • 0
  • 1

    确保在调用该函数的任何页面上调用session_start . 我也会取消注释用于销毁cookie的代码 . 这可以防止缓存数据的奇怪问题 .

相关问题