2016-03-29 142 views
0

在我的Django站點上,當我關閉標籤頁或瀏覽器時,我想自動從站點註銷。我的意思是,當我通過關閉該選項卡而不是使用註銷按鈕關閉網站時,在再次輸入URL後,我想看到用戶已經從網站註銷,強制用戶再次輸入用戶名和密碼。當用戶關閉標籤時註銷

有沒有辦法處理關閉JQuery中的選項卡?

預先感謝您。

編輯:onunload & onbeforeunload事件導致在重新加載頁面時註銷用戶。

+1

這應該有助於http://stackoverflow.com/a/13916847/2968762。你可以使用[store.js](https://github.com/marcuswestin/store.js/)代替'localStorage' – Abhi

+0

謝謝:)我想我需要做這些步驟。此外,我預計並假設有一個特殊事件處理「關閉標籤或瀏覽器」。 @Abhi – waterkinq

回答

0

您可以使用Javascript onunload & onbeforeunload事件。在這些事件中銷燬Django的會話cookie。

當您通過鏈接或瀏覽器後退按鈕離開網站時,也會觸發這些事件,因此如果這真的是您想要的,請小心並仔細考慮。

+1

如果用戶重新加載頁面會發生什麼? 我認爲如果用戶在一段時間內無效,會更好地設置會話終止。 – iamkdev

+0

感謝您的回答,但當我重新加載頁面或當我進入新頁面(重新加載頁面)時,它也會註銷用戶。 – waterkinq

0

將您的註銷碼添加到onunload事件上。

window.onunload = function() { 
    //logout code here... 
} 

在JQuery中,您可以使用.unload()函數。請記住,您沒有太多時間來發送Ajax請求,但結果可能無法到達客戶端。

另一個竅門是打開一個小小的新窗口並在那裏處理註銷。

window.open("logout url","log out","height=10,width=10,location=no,menubar=no,status=no,titlebar=no,toolbar=no",true); 

如果要禁用關閉窗口(或至少提醒用戶),您可以使用此代碼:

window.onbeforeunload = function(event) { 
    //if you return anything but null, it will warn the user. 
    //optionally you can return a string which most browsers show to the user as the warning message. 
    return true; 
} 

另一個竅門是繼續ping服務器客戶端每隔幾秒鐘。如果沒有回覆,假設用戶關閉了窗口,瀏覽器崩潰或者網絡問題無論如何都結束了聊天會話。在客戶端,如果您沒有收到此ping包,則可以假定網絡連接或服務器出現問題,並且可以顯示註銷警告(並可以讓用戶再次登錄)。