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

在我的应用程序(ASP.NET MVC 3 RAZOR)中,当会话过期并且用户尝试访问某些内容时,会将它们重定向到登录页面以重新登录。

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

处理这个问题的最好方法是什么? 理想情况下,如果会话已过期,我想显示一个模式,以便用户无法访问其他区域。 所以,即使他们离开了屏幕,一些jQuery也会检查会话,然后应用一个表达式'Session Expired'

我将如何做到这一点?

例如

if(SESSION HAS EXPIRED) { showModal(); }

我可以在这里看到两个单独的可解决问题,所以我将分别讨论它们。

以AJAX结果返回登录名
不是仅仅返回登录屏幕,而是返回一条表明会话已过期的消息。 如果你的AJAX收到这样的消息,它知道用户需要重新登录。此时,你可以做类似的事情

window.location = loginpageurlhere;

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

如果用户闲置时间过长,则显示对话框
为此,您需要知道用户不活动的时间。 你可以用几种不同的方式来做到这一点,其中之一如下:

  • 加载页面时,初始化一个变量以用作倒计时。
  • 设置一个计时器,每当计时器用完时就递减计数器,然后重新启动计时器。
  • 如果计数器达到零,则显示对话框并让用户重新登录。
  • 每次有效的活动发生时(AJAX帖子或其他任何你可能拥有的),重置计数器。
  • 您可以使用这些方法中的任何一种,但是如果您担心在无人照管的机器上保护数据,第二种方法将是最好的,因为您可以阻止屏幕并仅显示对话框,并且在用户离开时发生,而第一种方法在用户实际尝试在您的页面上执行操作之前无法执行任何操作。


    您可以查看以下博客文章,其中介绍了一种很好的技术,允许您在此情况下让服务器返回401状态代码,这些代码可以在客户端捕获并执行相应操作(向用户显示模式)。


    您可以在jQuery中设置一个全局错误处理程序,每当jQuery ajax发现错误时就会调用它。 如果会话超时,则会引发401错误。 这可以被捕获并且用户重定向到登录页面。

    $( document ).ajaxError(function( event, jqxhr, settings, thrownError ) {
        if (jqxhr.status == 401) {
            window.location.replace("/login");
        }
    });
    

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

    链接地址: http://www.djcxy.com/p/71789.html

    上一篇: Handling AJAX requests if a session has expired

    下一篇: AJAX timeout issue in MVC