在我的应用程序(ASP.NET MVC3剃刀)中,当会话到期,用户试图访问某些内容时,它会将用户重定向到登录页面以重新登录。
这很好,但是当从ajax请求调用时(例如,如果用户离开屏幕有一段时间没有任何活动),它将在ajax请求中加载登录表单...这不是我想要发生的。
处理这个问题的最好方法是什么?理想情况下,如果会话已经过期,我希望显示一个模式,这样用户就不能访问其他区域。因此,即使他们离开了屏幕,一些jQuery也会检查会话,然后应用一个模式,显示“会话已过期”。
我该怎么做呢?
例如:
if(SESSION HAS EXPIRED) { showModal(); }
发布于 2011-10-11 15:59:18
我在这里可以看到两个单独的可寻址问题,因此我将分别讨论它们。
作为AJAX结果返回的登录
返回一条指示会话已过期的消息,而不是返回登录屏幕。如果您的AJAX收到这样的消息,它就知道用户需要重新登录。在这一点上,您可以这样做
window.location = loginpageurlhere;
或者,您可以检查AJAX响应,看看它是预期的响应还是登录页面。如果是登录页面,请使用上面的建议。
如果用户处于非活动状态的时间太长,则显示对话框
为此,您需要知道用户处于非活动状态的时间。您可以通过两种不同的方法来完成此操作,其中一种方法如下:
您可以使用这两种方法中的任何一种,尽管如果您关心的是保护无人值守计算机上的数据,那么第二种方法将是最好的,因为您可以阻止屏幕并只显示对话框,并且它会在用户离开时发生,而第一种方法在用户真正尝试在您的页面上执行操作之前无法执行任何操作。
发布于 2016-09-23 15:40:40
您可以在jQuery中设置一个全局错误处理程序,每次jQuery ajax捕获到错误时都会调用该处理程序。如果会话超时,则抛出401错误。这可能会被捕获,并将用户重定向到登录页面。
$( document ).ajaxError(function( event, jqxhr, settings, thrownError ) {
if (jqxhr.status == 401) {
window.location.replace("/login");
}
});
全局错误处理程序应始终添加到document对象中。
发布于 2011-10-11 15:52:23
您可以查看following blog post,它演示了一种很好的技术,允许您让服务器返回401状态码,在这种情况下,可以在客户端捕获该状态码并采取相应的操作(向用户显示一个模式)。
https://stackoverflow.com/questions/7728867
复制