在Global.asax文件中的事件是這樣寫的:爲什麼「Session_end」無法使用?
protected void Session_End(Object sender, EventArgs e)
{
var x = 5;
}
代碼不會到達那裏時,客戶端關閉窗口,爲什麼呢?
在Global.asax文件中的事件是這樣寫的:爲什麼「Session_end」無法使用?
protected void Session_End(Object sender, EventArgs e)
{
var x = 5;
}
代碼不會到達那裏時,客戶端關閉窗口,爲什麼呢?
當客戶端關閉窗口時,代碼沒有到達那裏,爲什麼?
因爲這個事件不應該在客戶端關閉瀏覽器時調用。這個事件(顧名思義)是在會話過期時被調用的。默認會話到期超時時間爲20分鐘,因此在客戶端關閉瀏覽器20分鐘後將調用此事件。
哦,還有,你應該知道的一個很重要的疑難雜症:如果您使用的進程外,在會話狀態模式(如的StateServer或SqlServer的)這一事件將永遠被調用。
+1以及與會話模式相關的Session_End方法。 –
那我該怎麼辦呢? – Refael
@Refael,做什麼?檢測到客戶已關閉瀏覽器?這不可能。你不應該試圖檢測。您可以使用javascript並訂閱['onbeforeunload'](https://developer.mozilla.org/en-US/docs/DOM/window.onbeforeunload)事件,當客戶端離開頁面時將調用該事件。 –
P.S:該Session_End
事件僅由InProc
會話管理器
當你的會話中獲取過期它被調用支載。
我認爲你的需要是在頁面關閉或文檔解開時使用javascript函數,即onbeforeunload。並且在該函數中向服務器發出ajax請求,指示客戶端正在關閉窗口。但是您應該注意安全性,因爲這種JavaScript方法在客戶端註冊,惡意用戶可以更改ajax請求(甚至阻止它)。如果你不考慮任何安全問題,你很好去。祝你好運。
不要忘記,當重定向離開當前頁面時,也會調用此事件,而不僅僅是當用戶關閉他的瀏覽器時,這可能不合意。 –
我知道,但我敢打賭,他並不關心它:) –
只是值得一提的。 –
因爲該功能在會話結束時觸發。關閉瀏覽器窗口不會結束會話。在IIS中檢查您的會話超時值。我希望它在瀏覽器關閉後的那段時間內觸發。 – asawyer