【发布时间】: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 会话超时时得到什么状态码?