2011-10-13 46 views
0

有沒有什麼方法可以檢測用戶何時離開頁面,無論是通過關閉瀏覽器,在地址欄中輸入新的URL,單擊重定向到其他域的鏈接等。如何在用戶離開頁面之前與服務器同步並清除會話?

這樣做的主要目的是要執行某些活動,如:

  • 同步與服務器一些數據駐留在客戶端
  • 清楚服務器會話

我嘗試與窗口的卸載和beforeunload事件,並閱讀其他問題,如: Best way to detect when a user leaves a web page? // Is there any way to know that user leaving a page with asp.net?但我沒有找到答案我會期待。

下面是一個簡單的JS代碼片段明白我是想:

window.onunload = function(){ 
    if (theConditionThatINeed){ 
     doThings(); 
     SyncWithServerAndAbandonSession(url, localObjects); 
    } 
    else { 
     doNothing(); 
    } 
} 

我不希望在用戶離開前,顯示任何確認的,所以我認爲onbeforeunload韓元」在這裏幫助我。

假設答案是「沒有辦法做這種事情」,那麼我建議的做法是完成我想要的同步和會話清除?

,我支持主要的瀏覽器是IE> = 7

回答

1

正如您已經閱讀,這是不可靠的能夠檢測用戶是否離開你的頁面。 一般來說,在客戶端存儲任何未初始化的狀態是不好的做法。瀏覽器很容易關閉或崩潰。

如果用戶在頁面上做了任何事情,您可以通過javascript發送自己的ajax Keepalive消息。再次,非常不可靠,浪費和哈克。 短暫超時後自動同步。

看看REST完整的web應用程序。這個概念很有趣,並且非常表面地講,不鼓勵在服務器上保存狀態信息。您也可以將其應用於客戶端。

這通常會導致在URL中保存狀態信息。該URL告訴服務器它需要知道的任何服務請求,它不應該需要任何以前活動的內存(會話)。 我嘗試只保留會話中的用戶標識信息。我也會擺脫這一點,但有些工具和庫需要會話中的用戶。

相關問題