会话状态模块��终止�� 事件未触发[英] SessionStateModule "End" event not firing

本文是小编为大家收集整理的关于会话状态模块��终止�� 事件未触发的处理方法,想解了会话状态模块��终止�� 事件未触发的问题怎么解决?会话状态模块��终止�� 事件未触发问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

你好,

我正在获取我的 Web 应用程序的 SessionStateModule 对象,以在会话的开始和结束时附加代码.我不能将我的代码放在 Global.asax 中,因为我的代码打算成为每个 Web 项目的通用代码.

public static void 开启(){var s = (SessionStateModule)HttpContext.Current.ApplicationInstance.Modules["会话"];s.End += new EventHandler(s_End);s.Start += new EventHandler(s_Start);}私有 静态 void s_Start(object 发送者,EventArgs e){//foo //}私有 静态 void s_End(object 发送者,EventArgs e){//foo //}


Start 事件运行完美,但 End 事件在会话超时结束时未触发.有什么问题?

推荐答案

请看我对这个问题的评论.会话结束时,您可能没有测试用例.您需要放弃 会话或等到它在 Timeout 属性指定的某个时间间隔后过期.如果您查看此事件的 MSDN 帮助页面,您会发现结束会话的说明:
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end%28v=vs.100%29.aspx[^].

另见:
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon%28v=vs.100%29.aspx[^],
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.timeout%28v=vs.100%29.aspx[^],
http://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.mode%28v=vs.100%29.aspx[^].

以防万一:如果出于某种原因您认为在浏览器中关闭网页后会话将立即结束,事实并非如此.

—SA

我自己解决了这个问题:

public static void 开启(){//会话结束var webAssembly = Assembly.GetAssembly(typeof(HttpApplication));var t = webAssembly.GetType("System.Web.HttpApplicationFactory", true);var fieldtheApplicationFactory = t.GetField("_theApplicationFactory",BindingFlags.NonPublic | BindingFlags.Static);var fieldEnd = t.GetField("_sessionOnEndMethod",BindingFlags.NonPublic | BindingFlags.Instance);var appFactory = fieldtheApplicationFactory.GetValue(null); (appFactory){fieldEnd.SetValue(appFactory, typeof(not_relevant).GetMethod("s_End", BindingFlags.NonPublic | BindingFlags.Static));}}私有 静态 void s_End(object 发送者,EventArgs e){//待办事项:保留 Global.asax 中的原始 Session_End//foo//}

本文地址:https://www.itbaoku.cn/post/1355851.html

相关标签/搜索