2010-01-08 108 views
24

我需要訪問global.asax.cs中Session_End事件上的會話變量,但HttpContext.Current爲null,因此不能訪問任何會話變量。Session_End上的asp.net會話變量

一)我可以以某種方式不同的訪問用戶會話,或

b)是否有Session_End中之前任何其他事件突出部分,我可以訪問用戶的會話變量?

回答

41

HttpContext.Current不適用於Session_End,但您可以直接使用this.Session訪問會話實例。

+2

是的。 System.Web.SessionState.HttpSessionState是我應該使用而不是HttpContext.Current。 Thanx – 2010-01-09 19:00:18

+0

真的很滿意,謝謝。 – Bharat 2017-01-23 10:16:17

+0

確實有幫助後見http://stackoverflow.com/questions/12294532/asp-net-values-of-session-variables-in-session-end-event這我懷疑它爲什麼是null。並檢查我是否使用過HttpContext.Current(y – MSTdev 2017-05-03 10:57:54

-1

除非您在會話超時時採取行動的具體目的使用Session_End,否則依靠Session_End並不是一個好主意。

我不相信有任何可靠的方法來捕捉用戶的會話結束(例如,當他們關閉瀏覽器時)。

+2

這不一定是正確的。如果您正在使用InProc會話,當會話在[timeoutvalue]分鐘內沒有活動時,將會觸發。如果您正在使用存儲的會話,則不會發生。 – womp 2010-01-08 19:35:52

+1

我認爲依靠session_end將是唯一的方法,如果你需要一個準確的全球活動用戶會話列表 – 2010-01-08 21:53:42

0

你想做什麼?

只有在Session_End之前沒有可以用來訪問Session對象的事件。

如果您存儲了與上次使用Session對象相關的操作時間戳,然後檢查該時間戳,可以瞭解應該何時結束。
(基於您的IIS設置/配置)。 但是,訪問它的行爲會延長會話對象的使用壽命。

當然,您需要通過使用隱藏的Ajax回發來檢查它,或者通過觸發一個事件或類似的東西。

但我真的不會建議這一點。你想做什麼,你需要這個?

+1

我想保持活動會話的所有用戶的全球列表。因此,我需要在用戶會話結束時清理用戶會話(讓我們考慮一下,用戶沒有註銷,他或她剛剛關閉了瀏覽器),所以我需要從全局哈希表中刪除此用戶,某些會話GUID。據我所知,SessionID對於不同的請求可以不同,所以我不能使用那個 – 2010-01-09 18:29:45