2012-04-14 102 views
0

在我的應用程序中,我保存了用戶的註銷時間。當用戶點擊登錄按鈕時這很好,但我的要求是即使用戶關閉瀏覽器也要保存註銷時間。如果這是不可能的,請告訴我一旦用戶關閉窗口後如何銷燬會話。如何在瀏覽器關閉時結束會話

任何幫助,將不勝感激。

+0

感謝Mat編輯它看起來不錯的問題 – Gouse 2012-04-14 11:25:23

回答

0

按照this answer,你應該能夠處理beforeunload事件,然後做一個AJAX註銷。

未經檢驗的,但它應該像這樣工作:

Ext.EventManager.on(window, 'beforeunload', function() { 
    Ext.Ajax.request({ 
    url: 'logout.json', 
    timeout: 60000 
    }); 
}); 
+0

感謝您的回覆此代碼適用於所有瀏覽器,如鉻和mozilla – Gouse 2012-04-14 10:55:05

+0

它工作正常謝謝你非常多 – Gouse 2012-04-17 11:23:02

2

它曾經是你不得不做同步阿賈克斯在事件處理程序。不知道在現代瀏覽器中是否仍然如此。如果你去異步,一定要用真實的客戶端負載進行測試,這樣你就不會遇到只出現在用戶之間的競爭狀態。

我會建議某種心跳來自客戶端的Ajax呼叫,每五分鐘說一次。如果您連續錯過兩次這樣的調用,則會終止會話服務器端。這將處理用戶未註銷的所有情況(瀏覽器崩潰,操作系統崩潰,網絡故障等)。

潛在的問題,作用於卸載事件:

  • 用戶是否有您的應用程序/網站打開我幾個選項卡,並關閉其中的一個,會發生什麼?您需要通知用戶將會有一個交叉表註銷。
  • 瀏覽器對卸載時可以執行的操作有一定的限制,以防止彈出窗口和無限循環阻止用戶關閉瀏覽器。你永遠不知道未來會發生什麼。這裏的歷史記錄:http://www.hunlock.com/blogs/Mastering_The_Back_Button_With_Javascript並通過上面回覆中的StackOverflow鏈接。
+0

感謝您的答覆 – Gouse 2012-04-17 11:22:32

0

這回答了問題的最後部分。通過關閉瀏覽器自動關閉會話。根據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的值將被刪除。

相關問題