2011-05-03 69 views
2

我有一個登錄頁面,涉及破壞會話並開始新會話。 Chrome和Firefox之間的結果非常不一致。PHP和AJAX會話:AJAX頁面上的會話變量不同於頁面上調用的頁面

我清理使用會話:

session_unset(); 
session_destroy(); 
session_start(); 
$_SESSION = array(); 

但在會話變量似乎仍然存在,直到我刷新頁面,然後它們就會消失。我的第二個問題就是,在這個登錄頁面調用的ajax頁面上,關鍵的$ _SESSION變量是不同的。這導致了ajax頁面上的大問題和不一致的結果。

什麼是最好的方式來銷燬一個會話,並設置新的變量,將提供給Ajax頁面?

+0

您能否提供一些進一步的代碼來查看您銷燬會話的位置以及您如何/在哪裏調用未消失的會話變量?你還可以舉一個你的AJAX調用的例子嗎? – 2011-05-03 11:25:11

回答

2

如果您使用會話cookie,您還必須「刪除」它們。

$cookie_params = session_get_cookie_params(); 

setcookie(
    session_name(), 
    false, 
    strtotime('2000-01-01') 
    $cookie_params['path'], 
    $cookie_params['domain'], 
    $cookie_params['secure'] 
); 

當然,在您發送回覆之前,瀏覽器不會刪除cookie。
新會話將在下一個請求中創建。

PS:手動狀態:

僅使用session_unset()老年人過時代碼,不使用$_SESSION

1

我發現:

session_unset(); 
session_destroy(); 
session_start(); 
$_SESSION = array(); 

要非常難以預測,並取得了不同的瀏覽器這是不尋常的PHP之間的結果。

要解決我只是用它代替:

session_start(); 
$_SESSION = array(); 

我知道這並不完全清楚,更換一個會話,但我真正需要的是要清除的會話。會話具有相同的session_id這一事實在我的場景中並不重要。

希望這可以幫助一些人擁有和我一樣的母馬!