【问题标题】:Ajax session timeoutAjax 会话超时
【发布时间】:2014-11-04 07:31:21
【问题描述】:

情况:

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

问题:

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

我的代码:

<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 请求时会话超时。它将 login.php 内容加载到当前页面,而不是将用户转发到 login Page

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

【问题讨论】:

  • 你试过window.location.href吗?
  • @northkildonan 是的,我尝试过但没有工作..我正确地使用 ajax 处理会话超时?
  • 您确定要设置 401 statusscode 标头吗? header('HTTP/1.1 401 Unauthorized', true, 401);
  • 您的服务器端代码似乎以302 或类似的方式响应,而不是401。为什么期望客户端代码执行error 处理程序?
  • @AndreasFurster 我怎么知道我在 ajax 会话超时时得到什么状态码?

标签: php jquery ajax


【解决方案1】:

如果您正在处理多个 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 页面

【讨论】:

    猜你喜欢
    • 2010-12-11
    • 2012-12-15
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2014-03-11
    • 2011-04-25
    • 2011-03-19
    • 1970-01-01
    相关资源
    最近更新 更多