我们有一个需要登录的内部ASP.NET MVC应用程序.登录工作很好,做了预期.我们的会话期限为15分钟.在一段时间内坐在单页上,用户已经丢失会话.如果他们尝试刷新当前页面或浏览到另一个页面,他们将在页面上登录.我们保留他们的请求,一旦他们登录,他们可以继续他们要求的页面.这很好.
但是,我的问题是在某些页面上有AJAX调用.例如,他们可以填写表单的一部分,漫游并让他们的会话过期.当他们回来时,屏幕仍然显示.如果他们只是填写一个框(将进行AJAX调用),AJAX调用将返回登录页面(在任何div的内部,AJAX应该简单地返回实际结果).这看起来很可怕
我认为解决方案是使页面本身过期(这样当会话终止时,它们会自动返回到登录屏幕,而不需要任何操作).不过,我想知道有没有意见/想法如何最好地实现这一点ASP.NET MVC中的最佳实践.
更新:
所以我继续在我的OnActionExecuting(根据Keltex的建议)
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数据.
我仍然认为我将实现Javascript倒计时以及womp建议.