2013-03-12 71 views
1

我想調用一個php腳本,它破壞會話並重新加載頁面後。jQuery PHP session_destroy

$(document).bind("active.idleTimer", function(){ 
    $.post("data.php?data=active"); 
    location.reload(); 
}); 

data.php

if($_GET['data'] == 'active') { 
    session_destroy(); 
} 

它不破壞會議,只有當我手動打開網址data.php?數據=主動這樣做,這是爲什麼?謝謝!

+1

在你的data.php中是否有session_start()? – egig 2013-03-12 14:27:53

+0

我認爲你需要在session_start()初始化會話之前銷燬它 – zgr024 2013-03-12 14:32:12

回答

2

的問題是,該腳本您將請求發送到正在使用它自己的會話。因此,用戶有一個會話,與發送「刷新空閒狀態」請求的會話不同。

一個解決方案就是使用JavaScript啓動計時器,當計時器用完時,只刷新頁面。

這就是爲什麼它只在你實際訪問data.php頁面時才起作用。

+0

說實話我不太明白這個答案:爲什麼你要發送請求的腳本使用它自己的會話?兩者共享相同的會話cookie,因此使用相同的會話。即使:計時器如何提供幫助? – 2013-03-12 14:38:42

+0

因爲瀏覽器(即加載頁面的用戶)是與服務器不同的「客戶端」,而不是發送請求的腳本。 – 2013-03-12 14:40:44

+0

多數民衆贊成它,非常感謝! – 2013-03-12 14:41:31

-1

修改:

$.post("data.php", {data: active}, function(whatever){} 

,並在你的PHP文件中使用:

$_POST['data']; 
+0

這是行不通的。 – 2013-03-12 14:29:07

+0

請刪除您的答案 – zgr024 2013-03-12 14:30:48

+1

這是不正確的。即使對於POST請求,也可以從$ _GET讀取URL參數。 – 2013-03-12 14:31:14

0

如果要使用存儲在$_SESSION陣列中的數據,則需要使用session_start()啓動或恢復現有會話。在你data.php,試試這個:

if($_GET['data'] == 'active') { 
    session_start(); 
    session_destroy(); 
} 

請,採取考慮到session_start()應使用您發送任何輸出到客戶端以前

希望它有幫助!

相關問題