2013-05-31 81 views
1

我想在php中使用會話,並沒有變得很遠。我所有的php頁面都是通過單個「門戶頁面」中的ajax調用的。我使用會話在ajax調用之間存儲信息。我有一個包含文件,它是每個ajax頁面中第一個將session_start作爲第一個方法調用的文件。會話數據似乎可以保存。但是,當我在用戶註銷頁面完成時,我遇到了擺脫會話的問題。 登出頁面是一個Ajax網頁基本上做到這一點:php session_destroy後不會丟失會話數據

session_start(); 
    $_SESSION = array(); 
    if (ini_get("session.use_cookies")) { 
     $params = session_get_cookie_params(); 
     setcookie(session_name(), '', time() - 42000,$params["path"], $params["domain"], $params["secure"], $params["httponly"]); 
    } 
//code to unset session variables 
     session_destroy(); 

,如果我嘗試寫會話變量的註銷頁面在屏幕上它是空的,因爲你所期望的。但是,如果我刷新門戶網站頁面並顯示session_id屏幕,它與上次會話剛剛被銷燬的ID相同。如果我關閉瀏覽器並再次打開它,我有一個新的會話

php會話cookie在註銷頁面被調用後仍然在瀏覽器cookie中。自然頁面刷新將加載這個cookie。爲什麼cookie不被刪除?我的代碼有問題,或者它與ajax頁面有關?

+0

你爲什麼在那裏設置一個cookie?爲什麼要調用'$ _SESSION = array();'? – kelunik

+0

難道是你仍然保存會話ID在URL或隱藏的表單字段? –

+0

你確定你不是程序員嗎? –

回答

0

當刪除一個cookie時,cookie的刪除將發生在告訴瀏覽器刪除該cookie的請求中。但在該請求期間,Cookie仍然存在。因此,要查看在刪除Cookie的調用中仍存在的Cookie是預期的行爲。

因此在註銷期間/註銷後,Cookie仍然存在。該cookie只會在清除該cookie的請求後發送1個請求。

如果cookie在註銷後仍然存在多個請求,請嘗試將cookie從42000到(11小時)的TIME差值增加到90000(25小時)。也許你和客戶之間有時區差異

+0

嗨。我不斷刷新頁面,cookie仍然存在。那麼這些刷新不是單獨的請求嗎?由於我使用ajax,刷新計數是否與刪除cookie相同?我通過在sepatate選項卡中輸入url來重新加載頁面,並且cookie仍然存在。我向域名提出其他請求,並且cookie仍然存在:) – user2274191

+0

你怎麼知道cookie仍然存在?你用javascript看?用PHP?用螢火蟲? –

+0

嗨。查看瀏覽器的cookie集合,並寫出session_id屏幕,在註銷之前和之後顯示相同的值。 – user2274191