我出于好奇而问这个问题。
我在global.asax
中注意到了这一点void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate mode
// is set to InProc in the Web.config file. If session mode is set to StateServer
// or SQLServer, the event is not raised.
}
我想了解为什么会话模式是StateServer或SQLServer时没有捕获/引发Session_End事件?
答案 0 :(得分:9)
因为ASP.NET Session State不再存在于内存中......
当使用不同的进程来存储会话状态时, IIS不知道(因为它没有耦合,会话状态不再由IIS保存)会话结束时... 。
这是特别因为超时,我从未尝试过,但是当你programaticaly调用Session.Abandon()时,该事件是否会触发?
答案 1 :(得分:2)
Session_End
事件仅由InProc
会话管理员支持:
ASP.NET Session-State Events (MSDN)
“支持Session_OnEnd事件 仅在会话状态Mode时 属性设置为InProc,即 默认。如果会话状态为Mode 是StateServer或SQLServer,然后是 Global.asax中的Session_OnEnd事件 文件被忽略。如果是会话状态 模式设置为自定义,然后支持 对于Session_OnEnd事件是 由自定义会话状态确定 商店提供商。“
本文介绍如何使用HttpModule
模拟此功能:
ASP.NET HttpModule for handling session end with StateServer (CodeProject)