我有一个ASP.NET MVC2 Web应用程序,它使用InProc会话来存储登录用户的ID。在控制器中,我使用自定义AuthorizeAttribute来检查Session的有效ID。
在GET-> POST-> REDIRECT之后,我也在我的控制器中使用TempData来显示确认消息。例如,当用户注销时,我的Logout()控制器操作会清除Session,设置TempData [“Message”]并重定向到Login()操作。 Login()操作然后显示任何非空的TempData [“Message”]。
TempData["Message"] = "You have successfully logged out.";
我的问题(最后)如下。如果会话超时,我希望能够将用户重定向到Login()操作,而不是用户注销。
TempData["Message"] = "You have been logged out due to inactivity.";
我不确定是否1)在这种情况下使用TempData集合是合适的,或2)处理这个问题的适当位置。
我想尽可能地遵守MVC指南/最佳实践,所以似乎以某种丑陋的方式使用Session_End并不是我想要的方式。我想避免在查询字符串中传入?timeout = true。
有什么想法吗?
答案 0 :(得分:1)
当会话过期时,您无法在服务器上执行任何操作,因为浏览器始终未连接到服务器。
我会创建一个javascript函数,在会话周期结束后的短时间内刷新页面。