我们有一个内部的ASP.NET MVC应用程序需要登录。登录功能良好并且符合预期。我们设置了15分钟的会话过期时间。如果用户在单个页面停留了那么长时间,他们将失去会话。如果他们试图刷新当前页面或浏览其他页面,他们将会看到登录页面。我们保留了他们的请求,因此一旦他们登录,他们就可以继续访问他们请求的页面。这样做效果很好。
但是,我的问题在于某些页面上有AJAX调用。例如,他们可能会填写表单的一部分,然后离开并让他们的会话过期。当他们回来时,屏幕仍然显示之前的内容。如果他们只是填写一个框(这将触发AJAX调用),这个AJAX调用将返回登录页面(而不是像应该的那样简单地返回实际结果)。这看起来很糟糕。
我认为解决方案是使页面本身过期(这样当会话终止时,他们自动返回登录屏幕,而不需要任何操作)。然而,我想知道是否有意见/想法如何最好地在ASP.NET MVC中实现这一点,特别是关于最佳实践方面的问题。
更新:
所以我已经按照Keltex的建议在我的OnActionExecuting中实现了这个功能。
但是,我的问题在于某些页面上有AJAX调用。例如,他们可能会填写表单的一部分,然后离开并让他们的会话过期。当他们回来时,屏幕仍然显示之前的内容。如果他们只是填写一个框(这将触发AJAX调用),这个AJAX调用将返回登录页面(而不是像应该的那样简单地返回实际结果)。这看起来很糟糕。
我认为解决方案是使页面本身过期(这样当会话终止时,他们自动返回登录屏幕,而不需要任何操作)。然而,我想知道是否有意见/想法如何最好地在ASP.NET MVC中实现这一点,特别是关于最佳实践方面的问题。
更新:
所以我已经按照Keltex的建议在我的OnActionExecuting中实现了这个功能。
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.Write("Invalid session -- please login!");
filterContext.HttpContext.Response.End();
}
else
{
...
}
}
这确实会让事情变得更好--即使他们有两个选项卡(其中一个具有他们可以触发的一些AJAX调用),并在第二个选项卡中明确注销,他们也会立即获得更加合理的东西,而不是一堆混乱的AJAX数据。
我仍然认为我会按照womp的建议实现Javascript倒计时。