在我的應用程序中,我保存了用戶的註銷時間。當用戶點擊登錄按鈕時這很好,但我的要求是即使用戶關閉瀏覽器也要保存註銷時間。如果這是不可能的,請告訴我一旦用戶關閉窗口後如何銷燬會話。如何在瀏覽器關閉時結束會話
任何幫助,將不勝感激。
在我的應用程序中,我保存了用戶的註銷時間。當用戶點擊登錄按鈕時這很好,但我的要求是即使用戶關閉瀏覽器也要保存註銷時間。如果這是不可能的,請告訴我一旦用戶關閉窗口後如何銷燬會話。如何在瀏覽器關閉時結束會話
任何幫助,將不勝感激。
按照this answer,你應該能夠處理beforeunload
事件,然後做一個AJAX註銷。
未經檢驗的,但它應該像這樣工作:
Ext.EventManager.on(window, 'beforeunload', function() {
Ext.Ajax.request({
url: 'logout.json',
timeout: 60000
});
});
它曾經是你不得不做同步阿賈克斯在事件處理程序。不知道在現代瀏覽器中是否仍然如此。如果你去異步,一定要用真實的客戶端負載進行測試,這樣你就不會遇到只出現在用戶之間的競爭狀態。
我會建議某種心跳來自客戶端的Ajax呼叫,每五分鐘說一次。如果您連續錯過兩次這樣的調用,則會終止會話服務器端。這將處理用戶未註銷的所有情況(瀏覽器崩潰,操作系統崩潰,網絡故障等)。
潛在的問題,作用於卸載事件:
感謝您的答覆 – Gouse 2012-04-17 11:22:32
這回答了問題的最後部分。通過關閉瀏覽器自動關閉會話。根據Wikipedia:當cookie創建時未設置到期日期或有效時間間隔時,將創建一個會話cookie。當用戶關閉瀏覽器時,Web瀏覽器通常會刪除會話cookie。
手頭的任務是使用Ext-state-CookieProvider
創建沒有失效日期的cookie。完全沒有配置expires
配置,會導致ExtJS將其默認爲7天。檢查the source爲此。因此,你需要用空的明確expires
創建的cookie,像這樣:
var cp = Ext.create('Ext.state.CookieProvider', {
expires: null
});
在瀏覽器關閉所有cookie的值將被刪除。
感謝Mat編輯它看起來不錯的問題 – Gouse 2012-04-14 11:25:23