首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如果会话已过期,则处理AJAX请求

如果会话已过期,则处理AJAX请求
EN

Stack Overflow用户
提问于 2011-10-11 23:49:51
回答 3查看 9.6K关注 0票数 5

在我的应用程序(ASP.NET MVC3剃刀)中,当会话到期,用户试图访问某些内容时,它会将用户重定向到登录页面以重新登录。

这很好,但是当从ajax请求调用时(例如,如果用户离开屏幕有一段时间没有任何活动),它将在ajax请求中加载登录表单...这不是我想要发生的。

处理这个问题的最好方法是什么?理想情况下,如果会话已经过期,我希望显示一个模式,这样用户就不能访问其他区域。因此,即使他们离开了屏幕,一些jQuery也会检查会话,然后应用一个模式,显示“会话已过期”。

我该怎么做呢?

例如:

代码语言:javascript
代码运行次数:0
运行
复制
if(SESSION HAS EXPIRED) { showModal(); }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-11 23:59:18

我在这里可以看到两个单独的可寻址问题,因此我将分别讨论它们。

作为AJAX结果返回的登录

返回一条指示会话已过期的消息,而不是返回登录屏幕。如果您的AJAX收到这样的消息,它就知道用户需要重新登录。在这一点上,您可以这样做

代码语言:javascript
代码运行次数:0
运行
复制
window.location = loginpageurlhere;

或者,您可以检查AJAX响应,看看它是预期的响应还是登录页面。如果是登录页面,请使用上面的建议。

如果用户处于非活动状态的时间太长,则显示对话框

为此,您需要知道用户处于非活动状态的时间。您可以通过两种不同的方法来完成此操作,其中一种方法如下:

  • 页面加载时,初始化一个用作倒计时的变量。
  • 设置一个计时器,该计时器在计数器超时时递减计数器,然后重新启动。
  • 如果计数器达到零,则显示对话框并让用户重新登录。
  • 每次发生有效活动(AJAX post或其他任何活动)时,重置计数器。

您可以使用这两种方法中的任何一种,尽管如果您关心的是保护无人值守计算机上的数据,那么第二种方法将是最好的,因为您可以阻止屏幕并只显示对话框,并且它会在用户离开时发生,而第一种方法在用户真正尝试在您的页面上执行操作之前无法执行任何操作。

票数 4
EN

Stack Overflow用户

发布于 2016-09-23 23:40:40

您可以在jQuery中设置一个全局错误处理程序,每次jQuery ajax捕获到错误时都会调用该处理程序。如果会话超时,则抛出401错误。这可能会被捕获,并将用户重定向到登录页面。

代码语言:javascript
代码运行次数:0
运行
复制
$( document ).ajaxError(function( event, jqxhr, settings, thrownError ) {
    if (jqxhr.status == 401) {
        window.location.replace("/login");
    }
});

全局错误处理程序应始终添加到document对象中。

票数 5
EN

Stack Overflow用户

发布于 2011-10-11 23:52:23

您可以查看following blog post,它演示了一种很好的技术,允许您让服务器返回401状态码,在这种情况下,可以在客户端捕获该状态码并采取相应的操作(向用户显示一个模式)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7728867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档