2010-10-21 59 views

回答

10

前段時間我一直在尋找一致的解決方案來解決這個問題,而我的決定是在不相信瀏覽器或用戶的情況下處理這種情況。

您無法確定用戶是否要離開您的頁面,何時以及何時使用「onunload」,您可能無法在瀏覽器關閉或離開您的頁面之前獲取該事件。瀏覽器崩潰不會給你任何信號,所以相信你知道用戶仍在查看你的頁面,並可能採取任何進一步的行動是有缺陷的。

對於註銷用戶而言,您可以做的最好的操作是放置一個適配會話超時,如果您需要進一步控制,可以嘗試使用「我還活着」的信號在關鍵頁面上添加AJAX調用,然後註銷那些不再響應的用戶(這需要啓用AJAX/JS的瀏覽器並可能排除潛在用戶)。

+2

+1 - 不要依賴瀏覽器。 – Nivas 2010-10-21 10:47:54

+1

我同意你的解決方案,但是我想在註銷之前用戶關閉瀏覽器時自動添加此處理以註銷。在我的應用程序中,如果用戶直接關閉瀏覽器而不註銷,則用戶無法在20分鐘之前登錄。 – DJJ 2010-10-21 12:44:09

+1

請記住,無論您提出什麼要求,無論多麼聰明,都不會放棄註銷信號,正如我上面所解釋的。您可以使用'onunload'發送一個註銷命令,但是您必須正確處理,以免導致用戶導航到系統的另一個頁面,而且它不會一直工作。我誠懇的意見是,這是不值得的努力。只是因爲失去的會話因超時而死亡。 – mdrg 2010-10-21 15:21:47

5

您正在尋找的onunload的:

window.onunload = function() { 
    // check the window is closed (see point 1 below) 
    // do log out 
} 

有2個問題是:

  1. 這就是所謂每當用戶導航離開頁面,刷新,或一般卸載以及就像瀏覽器窗口關閉時一樣。
  2. 瀏覽器之間似乎沒有一致的行爲。

我推薦使用不同的方法。

3

你必須去會話超時。既然你已經標記了你的問題JSP,我認爲它是一個你正在談論的Java Web應用程序。

您通常有一個會話超時偵聽器,並在偵聽器中有「註銷」代碼。

通常不會依賴客戶端事件:瀏覽器/系統崩潰,關閉而不關閉瀏覽器等不會觸發事件。

+0

請你詳細說明,或者你可以發送給我例子 – DJJ 2010-10-21 12:40:37

相關問題