簡體   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