我花了一段時間它的確切原因來解決這個問題,但這裏是什麼似乎是發生:摧毀舊會議,作出新的,但是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...' :-)
}
好吧,那似乎很簡單......我以爲因爲我已經在上面調用'session_regenerate_id();',所以沒有任何幫助。但是,這裏的解決方案是:**在破壞我的舊會話之後,**在調用'session_start(); **之後**'我需要再次調用'session_regenerate_id(TRUE);'。 **然後魔法會發生** -.- – olli