我需要访问global.asax.cs中Session_End事件上的会话变量,但HttpContext.Current为null,因此不能访问任何会话变量。Session_End上的asp.net会话变量
一)我可以以某种方式不同的访问用户会话,或
b)是否有Session_End中之前任何其他事件突出部分,我可以访问用户的会话变量?
我需要访问global.asax.cs中Session_End事件上的会话变量,但HttpContext.Current为null,因此不能访问任何会话变量。Session_End上的asp.net会话变量
一)我可以以某种方式不同的访问用户会话,或
b)是否有Session_End中之前任何其他事件突出部分,我可以访问用户的会话变量?
HttpContext.Current
不适用于Session_End
,但您可以直接使用this.Session
访问会话实例。
除非您在会话超时时采取行动的具体目的使用Session_End,否则依靠Session_End并不是一个好主意。
我不相信有任何可靠的方法来捕捉用户的会话结束(例如,当他们关闭浏览器时)。
这不一定是正确的。如果您正在使用InProc会话,当会话在[timeoutvalue]分钟内没有活动时,将会触发。如果您正在使用存储的会话,则不会发生。 – womp 2010-01-08 19:35:52
我认为依靠session_end将是唯一的方法,如果你需要一个准确的全球活动用户会话列表 – 2010-01-08 21:53:42
你想做什么?
只有在Session_End之前没有可以用来访问Session对象的事件。
如果您存储了与上次使用Session对象相关的操作时间戳,然后检查该时间戳,可以了解应该何时结束。
(基于您的IIS设置/配置)。 但是,访问它的行为会延长会话对象的使用寿命。
当然,您需要通过使用隐藏的Ajax回发来检查它,或者通过触发一个事件或类似的东西。
但我真的不会建议这一点。你想做什么,你需要这个?
我想保持活动会话的所有用户的全球列表。因此,我需要在用户会话结束时清理用户会话(让我们考虑一下,用户没有注销,他或她刚刚关闭了浏览器),所以我需要从全局哈希表中删除此用户,某些会话GUID。据我所知,SessionID对于不同的请求可以不同,所以我不能使用那个 – 2010-01-09 18:29:45
是的。 System.Web.SessionState.HttpSessionState是我应该使用而不是HttpContext.Current。 Thanx – 2010-01-09 19:00:18
真的很满意,谢谢。 – Bharat 2017-01-23 10:16:17
确实有帮助后见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