2009-05-17 97 views
4

我有一個網絡應用程序遊戲,而在遊戲中我希望擁有它,所以如果用戶關閉了頁面或瀏覽器,它會自動註銷它們。我試圖使用連接到窗口onbeforeunload事件:如何區分頁面刷新和關閉頁面

window.onbeforeunload = function() { 
    // perform logout functions here 
} 

的問題是,如果用戶刷新頁面,也將觸發。有沒有一種方法可以檢測用戶是否完全關閉了整個頁面,或者只是刷新它?

回答

8

沒有檢測到的差異。要自動註銷用戶,您應該在存儲登錄信息或會話信息的Cookie上設置過期時間。因此,如果您將其設置爲1小時,則該用戶將基本上在此時間之後退出,因爲Cookie將被銷燬。如果您希望在自動註銷時仍推遲此自動註銷,則可以在每次執行某種操作(單擊鏈接,激活AJAX調用等)時重置Cookie的到期時間。這意味着他們會在閒置1小時後註銷,而不是登錄後只需1小時,這聽起來更像您想要的。

如果您將Cookie的到期時間設置爲0,則會話結束後會過期。這通常發生在用戶完全退出瀏覽器時。這也是另一種選擇。

2

如上所述,你不能。更糟糕的是,這個事件已經被很多瀏覽器所拋棄,可能是因爲它被惡意腳本濫用而導致流行。

一個可能的解決方法是讓一個Ajax腳本「打電話回家」:如果它沉默了一段時間,用戶只是放棄了該網站(封閉頁面或瀏覽器)。

2

是否有onunload事件向服務器發送請求,導致會話在n秒內過期(其中n是發生頁面重新加載請求的最長時間,因此可能爲10)。然後讓該網站的腳本檢查是否計劃了該事件,如果是,則取消它。這會給你你想要的行爲。

但是,我建議只是讓會話過期。

0

如果我沒有弄錯Javascript應該有一個名爲onWindowClose的函數,也許嘗試搜索它?

關於PHP解決方案,我不確定是否有,但我建議你快速瀏覽一下PHP Connection Handling,特別是connection_aborted()和register_shutdown_function()函數。