当前位置: 首页 > 面试题库 >

ASP.NET MVC会话到期

董翰池
2023-03-14
问题内容

我们有一个内部ASP.NET
MVC应用程序,需要登录。登录效果很好,并且可以完成预期的工作。会话的有效期为15分钟。在该页面上坐了一段时间后,用户丢失了会话。如果他们尝试刷新当前页面或浏览到另一个页面,他们将获得登录页面。我们会将他们的请求html" target="_blank">存储起来,以便他们登录后可以继续进入他们请求的页面。这很好。

但是,我的问题是,在某些页面上有AJAX调用。例如,他们可以填写表格的一部分,徘徊并让其会话过期。当他们回来时,仍然显示屏幕。如果他们只是填写一个框(将进行AJAX调用),则AJAX调用将返回登录页面(在AJAX应该仅返回实际结果的div内)。这看起来太可怕了。

我认为解决方案是使页面本身过期(这样,当会话终止时,它们将自动返回登录屏幕,而无需任何操作)。但是,我想知道是否有关于如何最好地在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数据。

我仍然认为我也将实现womp建议的Java倒计时。


问题答案:

具体来说,我不知道有任何最佳实践,但是我现在正在为我们的应用程序执行此操作。我们选择了一种客户端解决方案,在该解决方案中,我们将会话超时值输出到母版页中的某些javascript中,并计算会话何时到期。

提前5分钟,我们弹出一个模态对话框,显示“您还在吗?” 带有倒数计时器 计时器到达0:00后,我们会将浏览器重定向到登录页面。

它使用最少的javascript进行时间和计时器计算,并且使用简单的.ashx处理程序实现,如果用户单击“我回来了”,该处理程序将刷新会话。会话到期前,请在对话框中单击。这样,如果他们及时返回,则无需任何导航即可刷新会话。



 类似资料:
  • 在发布这个问题之前,我谷歌了很多这个问题,并且在网络Socket@ServerEndpoint中从HttpServletRequest访问Http会话是我能找到的最好的问题/答案之一,但它似乎不能解决我的问题。 我可以通过这种方式从websocket访问HttpSession,但是我无法访问与普通HTTP请求相同的CDI会话bean实例。 我也尝试在会话中存储Weld实例,并尝试在WebSocke

  • 问题内容: 我有一个使用spring和hibernate的java stuts2 Web应用程序。 我越来越。 SpringBean.xml hibernate.cfg.xml CustomerServiceImpl.java CustomerDaoImpl.java CustomerAction.java 我得到的例外 问题答案: 您在Spring配置中指定了一个事务管理器,但是没有关于何时或何

  • 我读过关于命名空间属性的文章。我尝试使用此功能: 它工作得很好。 作为一项改进,我希望覆盖会话服务,因此它将在任何地方使用,并使用依赖注入,而不是将会话服务耦合到addProduct函数中。 为此,我编辑了我的services.yaml 然后我更新CartController: 现在我得到了以下错误消息: 检测到服务“会话”的循环引用,路径:“会话”- 这个错误应该在这个问题上得到解决:#3626

  • servlet 可以按名称绑定对象属性到 HttpSession 实现,任何绑定到会话的对象可用于任意其他的 servlet,其属于同一个 ServletContext 且处理属于相同会话中的请求。 一些对象可能需要在它们被放进会话或从会话中移除时得到通知。这些信息可以从 HttpSessionBindingListener 接口实现的对象中获取。这个接口定义了以下方法,用于标识一个对象被绑定到会

  • Django 提供对匿名会话的完全支持。其会话框架让你根据各个站点的访问者存储和访问任意数据。它在服务器端存储数据并抽象Cookie 的发送和接收。Cookie 包含会话的ID —— 不是数据本身(除非你使用基于Cookie 的后端)。 启用会话 会话是通过一个中间件实现的。 为了启用会话功能,需要这样做: 编辑MIDDLEWARE_CLASSES 设置并确保它包含'django.contrib.

  • 会话(Cookie)查询与修改操作类 进程: 主进程​ 1 const {session} = require('electron') 2 //查询所有Cookie。 3 session.defaultSession.cookies.get({}, (error, cookies) => { 4 console.log(error, cookies) 5 }) 6 //查询与特定网址相关联的所有C