【问题标题】:Detect Session Expiry in Asp.Net MVC 5 Razor Application在 Asp.Net MVC 5 Razor 应用程序中检测会话过期
【发布时间】:2015-02-05 05:52:06
【问题描述】:

我正在开发 Asp.Net MVC 5 Razor 应用程序。我正在维护单独的表来维护登录信息。当用户登录时,我在该表中的登录成功回调字段 (IsLoggedIn) 中输入“true”。当用户注销时,我在注销模块成功回调的该字段中输入“false”。

我有一个问题。如果用户没有按注销按钮,并且其会话已过期,则会注销。我的注销成功回调未被调用,并且数据库中的“IsLoggedIn”字段仍然对该用户显示为真。

我找不到任何关于如何检测会话到期事件并调用我的表更新函数将“false”放入“IsLoggedIn”字段以用于用户行的信息?

有什么帮助吗?

【问题讨论】:

  • 你使用的是哪种会话状态模式?
  • 我的 web.config 中没有类似的东西。
  • 您在 web.config 中没有看到类似 的内容?
  • 如果您在 web.config 文件中没有看到类似 sessionstatemode 的内容,则您的应用程序默认使用 inproc sessionstate 模式。
  • 如何检测任何用户会话的会话到期?

标签: asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

如果您的应用程序使用 InProc SessionState 模式,则可以在 Global.asax 中的 Session_End 事件中处理会话超时(如果未指定,这是 ASP.net 中的默认设置)

void Session_End(object sender, EventArgs e) {
    // perform your logic
}

在执行此操作之前记住一件事该事件将被调用,但不一定在超时之后。

还要考虑到这一点,According to MSDN,HttpSessionState.Timeout 属性有一个设置器,可以在您的应用程序代码中以及在 web.config 中永久更改

希望对你有帮助

【讨论】:

  • 太棒了。它检测到会话结束,但 HttpContext.Request.Cookies 在 Session_End 方法中不可用。
  • 您需要在会话结束事件中使用 cookie 做什么?
  • 我的会话详细信息,如用户名和 sessionId 保存在 cookie 中。 HttpContext.Current.Session.SessionIDRequest.Cookies["LoginDetail"]
  • 使用this.Context.Request.Cookies获取cookie集合怎么样?
  • 我想从 cookie 中获取值并使用 'IsLoggedIn' false 更新表。
猜你喜欢
  • 2010-12-02
  • 2013-11-23
  • 2015-06-13
  • 1970-01-01
  • 2016-09-27
  • 2015-01-14
  • 2017-08-16
  • 2014-02-20
相关资源
最近更新 更多