3

在 ASP.NET MVC3 中,我似乎无法覆盖会话超时。我已经在我能想到的所有相关服务器端代码点(globax.ax.cs 中的控制器操作和方法)设置了断点,但会话超时似乎没有任何影响。

我什至按照这里的建议应用了一个属性:(http://www.tyronedavisjr.com/2008/11/23/detecting-session-timeouts-using-a-aspnet-mvc-action-filter/)但即使它不是会话超时时点击。当然超时必须是会话端的,但是在哪里呢?

有谁知道当 ASP.NET MVC 应用程序有会话超时时究竟会发生什么?

4

2 回答 2

3

通常,会话超时可以在 Global.asax 中的 Session_End 事件中处理

void Session_End(object sender, EventArgs e) {
    // perform last minute procedures before session ends
}

根据 MSDN,该HttpSessionState.Timeout属性有一个设置器,可以在应用程序代码中进行更改,也可以在 web.config 中永久更改

于 2012-08-01T15:28:17.563 回答
3

您使用的是什么 sessionState 模式?(<sessionState mode=" ... ">在 web.config 中)

您应该能够将以下方法添加到 Global.asax.cs 以覆盖默认的 Session_End 行为:

protected void Session_OnEnd(object sender, EventArgs e)
{
    // insert code here
}

要记住的事情:

  • 仅当 HttpSessionState.Mode 属性值为 InProc 时才会调用 Session_OnEnd / Session_End 事件(这是默认值,因此如果您没有在 web.config 中更改它,这应该没问题)。如果您已将其更改为 StateServer 或 SQLServer,则 Global.asax 文件中的 Session_OnEnd 事件将被忽略。

  • 应用程序在放弃会话时调用 Session_OnEnd / Session_End 事件,而不是在您关闭浏览器时。您可以通过调用手动触发它Session.Abandon

于 2012-08-01T15:34:00.873 回答