2010-01-08 82 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