我想要做什麼:在客戶端檢測到「OnBeforeUnload」事件後處理會話。我知道它不會觸發100%的時間(90%的準確度對我來說很好)onBeforeUnload - 如何在不使用ajax的情況下調用服務器端函數
Here我看到了如何使用ajax做到這一點,然而,這個系統與ajax分離:我無法使用它在所有。
我正在尋找做法的方法
我想要做什麼:在客戶端檢測到「OnBeforeUnload」事件後處理會話。我知道它不會觸發100%的時間(90%的準確度對我來說很好)onBeforeUnload - 如何在不使用ajax的情況下調用服務器端函數
Here我看到了如何使用ajax做到這一點,然而,這個系統與ajax分離:我無法使用它在所有。
我正在尋找做法的方法
總之,你不能。你不能容忍用戶的瀏覽器人質,如果你可以做你想做的事情(例如,在頁面退出時重定向),這就是漏洞利用。 AJAX是您服務器端調用的唯一選項,正如您所述,這也是不可靠的。
我不知道在「onBeforeUnload」期間是否可以這樣做,但也許可以嘗試。
注入圖像您的網頁,如:
<img src="yourscript?param1=value1¶m2=value2" />
從服務器端只返回一個空的圖像。
您可能需要掛接同步調用而不是AsynchronousJAX。
我不想隱藏瀏覽器......但這很容易:只需在OnBeforeUnload事件之後觸發警報,確認或重定向。我已經在我的機器上完成了Firefox/IE 7 但是我不想這麼做......我只是想作爲最後一個動作向服務器發送一個標誌來終止會話。每個會話超過7 MB,如果用戶關閉瀏覽器,它必須被釋放。 – 2010-07-22 12:42:25
如果瀏覽器崩潰怎麼辦?如果互聯網連接斷開怎麼辦?如果JS首先未啓用,該怎麼辦?忘記試圖檢測用戶何時離開。只需定期清理不活動的會話。 – Quentin 2010-07-22 13:08:38
@Lynx - 您聯繫服務器的兩種方法是重定向到那裏和AJAX(您現在不能從新元素創建GET請求)。每個平臺都會超時,幾乎所有的平臺都提供了一個清理機制(ASP.Net沒有什麼不同,默認情況下是20分鐘)。堅持服務器端清理,有一個原因*每個人*這樣做...你不覺得如果這是可能的,它會完成嗎?此外,會話對於瀏覽器窗口並不是唯一的,它在標籤頁之間共享,如果我打開另一個標籤頁會怎麼樣?這種方法也會殺死該標籤。 – 2010-07-22 13:45:45