Ajax会话超时

时间:2014-11-04 07:31:21

标签: php jquery ajax

情况:

我的网络应用程序受密码保护。对于我们向服务器发出的每个 http 请求,都会根据会话进行检查。如果会话已过期,则会将用户转发到登录页面。 这适用于http请求。但如果它是一个AJAX请求,那么就像http请求一样,如果会话已经过期,它也会被转发到登录页面。

问题:

如果我们在浏览器中直接显示AJAX响应,那么代替我们预期的响应将在浏览器中显示登录页面内容。如果您要获取任何预期格式的数据,那么它将抛出JavaScript错误。 / p>

我的代码:

<script>
function details() {
var xyz = document.getElementById("name").value;
// Returns successful data submission message when the entered information is stored in database.
var dataString = 'name=' + xyz;

// AJAX code to submit form.
$.ajax({
type: "POST",
url: "user.php",
data: dataString,
cache: false,
success: function(html) {
document.getElementById("content").innerHTML=html;
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
    if (XMLHttpRequest.status === 401) {
          location.href = 'index.php';
        }
}
});
return false;
}  
</script>
当我通过我的代码调用Ajax请求时,

on session time out。它会将 login.php 内容加载到当前页面,而不是将用户转发到登录页面

指导我在哪里做错了。
感谢。

1 个答案:

答案 0 :(得分:2)

如果您正在使用多个ajax请求,那么您可以使用jquery ajaxComplete函数。
每次在ajax调用之后但在附加到该ajax事件的成功或失败函数之前运行此函数。
例如,这段代码是:

jQuery("body").ajaxComplete(
                function(event, request, options) {
                    if (request.responseText == "login_required") {
                        window.location.href = "login.php";
                    }
                }
            );

在服务器端,您只需检查请求是否是ajax请求,如果用户未登录,只需打印“login_required”并停止执行代码(退出代码)。
用户将重定向到login.php页面