Ajax回调如何实现用户的身份验证会话已超时?

时间:2009-04-06 21:52:53

标签: jquery ajax django authentication http-authentication

我正在使用django和jquery来实现经过身份验证的会话和Ajax请求。

我已经过身份验证会话超时,以便在我网站上长时间不活动后将经过身份验证的用户注销。我网站上的一些页面中有很多AJAX调用,要求用户进行经过身份验证的会话。当用户长时间打开这样的页面并且会话自动超时时,所做的任何AJAX调用都将失败并显示浏览器错误。我的Web堆栈(django)返回一个重定向到这些AJAX请求的登录,但它们只是显示为$ .ajax()的错误(使用jquery。)

当我发现他们的auth会话已超时时,我怎样才能重新加载页面并通过AJAX请求将用户发送到登录页面?

2 个答案:

答案 0 :(得分:7)

一种方法是使用一个脚本来ping页面以查看它是否仍然登录,但这会增加您必须执行的AJAX请求的数量。

另一个选择是使complete $.ajax()函数检查传入的XMLHttpRequest对象上的HTTP状态代码:

$.ajax({..., complete = function(xhr, textStatus){
    if(xhr.status > 300 && xhr.status < 400) //you got a redirect
        window.location.href = '/login/';
    ...
    }, ...);

答案 1 :(得分:1)

简单的说,你要查询的任何脚本都会返回某种错误代码,也许

{'error', 'notloggedin'}

然后,您需要做的就是在javascript中检查此值。如果找到了,那么你可以做一些像

这样的事情
window.location.href = '/login/';

使javascript重定向到登录页面(根据需要更改路径)