【问题标题】:When is Session_End() called in ASP.NET MVC?ASP.NET MVC 中何时调用 Session_End()?
【发布时间】:2019-05-18 04:03:12
【问题描述】:

我在 ASP.NET MVC 2 项目中配置了我的Web.Config 文件如下:

<sessionState mode="InProc" timeout="1"/>

并在Global.asax.cs中添加了以下内容:

protected void Session_End(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_End");
}

protected void Session_Start(object sender, EventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Session_Start");
}

Session_Start() 在新用户访问网站时被调用。我本来希望在 1 分钟的空闲时间后调用 Session_End(),但事实并非如此。我错过了什么吗?

【问题讨论】:

    标签: asp.net-mvc web-config session-state session-timeout


    【解决方案1】:

    记住这一点:

    如果您不将任何内容保存到会话中,则 session_end 将不会 火。如果您在第一个请求中保存会话中的数据,并在 同样的请求 session_end 也不会被触发。

    希望这会有所帮助!

    T

    顺便说一句: ASP.NET Session_End event not firing

    【讨论】:

      【解决方案2】:

      要有耐心。应该调用该事件,但不一定在超时后立即调用。

      您可以从浏览器尝试:开始会话,等待 > 1 分钟,以某种方式进行回发

      这应该有助于验证 Timeout 是否有效,我认为您也会看到 SessionEnd 发生在那个时候。否则,只需等待并开始其他一些会话。系统会在某个时候出现或调用它。

      【讨论】:

      • 有趣,我本以为它会在 1 分钟标记处调用它
      【解决方案3】:

      测试提示:使用Session.Abandon,这样您就不必弄乱您的实际 web.config 值。只是不要设置会话值并在同一请求期间调用Session.Abandon,否则它不会被存储。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多