2013-11-02 41 views
1

我花了一段時間它的確切原因來解決這個問題,但這裏是什麼似乎是發生:摧毀舊會議,作出新的,但是PHP仍然指的是舊的會話

我有一個會議。我想徹底殺死我目前的會議,並從頭開始,用全新的會議,它有一個空白的石板。

所以這是我做的:

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。進入谷歌開發者工具看我的cookies,我看到一個不同的ID爲PHPSESSID。我看到的確切ID,當我想要在下一頁回顯session_id()時,我會看到...

爲什麼會發生這種情況,我做錯了什麼? 如何獲取session_id()向我顯示新會話ID,而不是舊會話ID? 如何將值寫入NEW $ _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...' :-) 
} 

回答

1
+0

好吧,那似乎很簡單......我以爲因爲我已經在上面調用'session_regenerate_id();',所以沒有任何幫助。但是,這裏的解決方案是:**在破壞我的舊會話之後,**在調用'session_start(); **之後**'我需要再次調用'session_regenerate_id(TRUE);'。 **然後魔法會發生** -.- – olli

0

確保您所呼叫的任何頁面調用該函數在session_start。我還會取消註釋銷燬cookie的代碼。這可能可以防止緩存數據出現奇怪的問題。

+0

如果我嘗試在沒有調用'session_start();' 的頁面上嘗試做任何事情,我會得到一個錯誤我不完全確定cookie是什麼破壞代碼,所以我保持它的評論,因爲問題是固定的,即使代碼被評論。 – olli