2011-03-28 70 views
9

我想弄清楚如何摧毀一個ASP.NET會話時,用戶導航離我的site.I使用Global.ascx應用程序文件並使用session_end事件。點擊註銷按鈕。但是,當我直接關閉瀏覽器20分鐘後不使用全局文件。我在web.conig文件作爲<sessionState mode="InProc" timeout="20"></sessionState>
請幫我
奧古斯丁會話處理在asp.net

回答

7

會話超時定義當一些會議將一些閒置的時間後銷燬終止會話。

如果您想要更好地控制會話,您需要使用SQLServer模式,狀態服務器模式或自己定製的模式。

我的意思是,因爲,例如,SQLServer模式將會話存儲在標準SQL Server表中,因此,您可以實現一些SQL Server作業,或者在Windows或某些Windows服務中安排某些任務,以便可以清理根據您的需要開啓會議。

順便說一句,也許你需要知道,如果你使用InProc,你的會話可能會被破壞,因爲IIS回收應用程序池或服務器完全重新啓動。這不是結束會話,所以適用的事件和處理程序在這種情況下不起作用。

我再說一遍,如果您需要更好的會話管理模式,就像我建議您的那樣。


編輯:

查看本頁面: http://aspalliance.com/520_Detecting_ASPNET_Session_Timeouts.2

您將學習如何處理會話超時更好,因爲當會話過期Session_End中不叫,但是當你調用「 Session.Abandon」。

+0

+1:一個非常好的教程馬蒂亞斯。 – Kamyar 2011-03-28 08:00:57

+0

謝謝。但我沒有編寫這個教程! :D – 2011-03-28 08:03:45

+0

我知道。但感謝分享:) – Kamyar 2011-03-28 08:05:17

1

您可以通過調用Session.Abandon()

+0

我使用Session.abandon和明確的(),但是,我的問題是,如果我們關閉瀏覽器它不工作... – augustine 2011-03-28 07:36:36

3

當訪問者「導航」或「關閉瀏覽器」時,瀏覽器不會向網站發送信號。所以asp.net(或任何其他服務器端技術)不能對此做出反應以銷燬會話。

這就是爲什麼會話在超時時間內工作的原因:如果用戶在超時時間內沒有執行請求,那麼他應該已經放棄了會話,即使他剛剛閱讀該頁面超過20分鐘。

3

使用RegisterClientScriptBlock創建一個調用頁面加載session.End並關閉頁面(Window.Close())的新頁面。在使用Javascript卸載當前頁面時調用此新頁面window.Location。

4

可以使用INPROC模式的SQLServer模式instread