2010-08-19 49 views

回答

0

取決於您如何存儲會話。

如果你使用的是InProc,那麼你可以掛接到Global.asax中的Session_End中應用程序事件:

protected void Session_End(Object sender, EventArgs e) 
{ 
    // Remove user session 
} 

如果你不使用的是InProc(即你正在使用的SQLState,ASP.NET狀態服務等),那麼你需要編寫一個自定義的HttpModule。 Here是codeproject上的一個體面的例子。

請注意,這隻會處理過期的會話,即服務器端會話。

瀏覽器關閉是一個客戶端事件,因此要立即處理瀏覽器關閉事件(即不要依賴服務器稍後發生的超時),您需要編寫客戶端代碼。

你最好的賭注是勾入onbeforeunload事件:

<body onbeforeunload="handleBrowserCloseEvent()"> 

的功能將需要作出一個AJAX調用服務器到期的會話。

希望有所幫助。

+0

我想要實現的是當用戶在線時我想向他展示他,因爲他在線,當他會話過期時,我想讓他脫機。我改變他的狀態在sql表IsOnline false或true。它很容易顯示登錄和註銷事件。但我不確定如何在會話過期後更新sql數據庫。也許你有一個更好的解決方案如何實現相同的結果...謝謝 – Din 2010-08-20 01:44:34

+0

我不明白你在問什麼 - 你是否將會話存儲在SQL狀態數據庫中?你如何「改變他在sql表中的狀態」?這是一個自定義表嗎?您應該讓SQL狀態數據庫處理匿名/經過身份驗證的會話邏輯的實際數據庫端。 – RPM1984 2010-08-20 01:48:48

+0

我正在存儲在SQL數據庫中。在登錄或註銷事件中使用linq查詢更新IsOnline字段 – Din 2010-08-20 12:30:45