asp.net-mvc – ASP.NET MVC会话过期

我们有一个需要登录的内部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建议.

解决方法

具体来说,我不知道有什么最好的做法,但我现在正在为我们的应用程序做这个.我们选择了一个客户端解决方案,我们将会话超时值输出到主页面中的一些JavaScript中,并计算会话何时过期.

5分钟前,我们弹出一个模态对话框,说“你还在吗?配有倒数计时器.一旦定时器命中0:00,我们将浏览器重定向登录页面.

它使用最少量的JavaScript来执行时间和计时器计算,以及一个简单的.ashx处理程序,如果用户点击“我回来了”,将刷新会话.在会话到期之前的对话框上.这样,如果他们及时返回,他们可以刷新会话而无需任何导航.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...