代码之家  ›  专栏  ›  技术社区  ›  this. __curious_geek

当StateProvider不是InProc时,为什么没有引发会话结束事件?

  •  5
  • this. __curious_geek  · 技术社区  · 15 年前

    我问这个问题是出于好奇。

    我在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时,为什么没有捕获/引发会话结束事件?

    2 回复  |  直到 15 年前
        1
  •  9
  •   balexandre    15 年前

    因为 ASP.NET Session State 它已经不在记忆中了…

    当使用其他进程存储会话状态时, IIS不知道 (因为它不耦合,会话状态不再由IIS保持)会话结束时…

    这特别是因为超时,我从未尝试过,但是当您通过编程调用session.discarge()时,是否会触发该事件??

        2
  •  2
  •   Kev    15 年前

    这个 Session_End 事件仅由 InProc 会话管理器:

    ASP.NET Session-State Events (MSDN)

    “支持会话结束事件 仅当会话状态模式 属性设置为InProc,即 默认值。如果会话状态模式 是stateserver或sqlserver,然后 global.asax中的会话结束事件 文件被忽略。如果会话状态 模式设置为自定义,然后支持 对于会话结束事件是 由自定义会话状态确定 存储提供程序。“

    本文解释如何使用 HttpModule 要模拟此功能:

    ASP.NET HttpModule for handling session end with StateServer (CodeProject)