gpt4 book ai didi

javascript - Ajax - 我需要在每个 AJAX 请求之前检查是否存在有效 session

转载 作者:行者123 更新时间:2023-11-30 18:57:46 25 4
gpt4 key购买 nike

我正在从事一个使用用户身份验证的项目。如果发出请求时不存在经过身份验证的 session ,我的 AJAX 请求就会遇到问题。

我有一个 3 分钟的 session 超时,所以如果用户保持空闲 3 分钟然后执行一些导致 AJAX 请求的操作,那么该请求将失败并返回 403 错误。在这里,我打算做的是拦截来自页面的所有 AJAX 请求,并向服务器发送一个 ping,服务器将返回一个 JSON 对象,说明是否存在有效 session 。如果有,则客户端将继续当前请求,否则它将重新加载当前页面,这会将用户带到登录页面,并且用户必须再次提供凭据。

这是我的实现。

$("#param-ajax").ajaxSend(function(evt, request, settings) {
var pingurl = GtsJQuery.getContextPath() + '/ping.json';
var escapedurl = pingurl.replace(/\//g, "\\/");

var regexpr1 = eval('/^' + escapedurl + '\\?.*$/');
var regexpr2 = eval('/^' + escapedurl + '$/');
// Proceed with the ping only if the url is not the ping url else it will
// cause recursive calls which will never end.
if (!regexpr1.test(settings.url) && !regexpr2.test(settings.url)) {
var timeout = false;
$.ajax({
url : pingurl,
cache : false,
data : {
url : settings.url
},
async : false,
complete : function(request, status) {
if (status == "error") {
try {
// GtsJQuery.getJsonObject() converts the string
// response to a JSON object
var result = GtsJQuery
.getJsonObject(request.responseText)
if (result.timeout) {
timeout = true;
return;
}
} catch (e) {
// ignore the error. This should never occure.
}
}
}
});
// Reload the window if there is a timeout -- means there is no valid
// sesstion
if (timeout) {
window.location.reload();
}
}
});

这里一切正常,包括 window.location.reload(),但原始的 ajax 请求没有中止。由于在触发页面重新加载后原始 AJAX 请求没有中止,因此 AJAX 请求也被发送到服务器。我想要某种机制,如果超时结果为真,我将允许我中止原始请求。

This post提供了一些答案,但问题仍然存在于第三方插件,如使用 AJAX 的数据表。我们无法为这些 AJAX 请求编写错误处理程序。

谢谢。

最佳答案

如果我了解情况,您不需要任何这些。在您最初的 ajax 请求中,只需添加一个错误函数即可重定向用户。

errHandler = function(XMLHttpRequest, textStatus, errorThrown) {
if( textStatus.match(/forbidden/i) ) {
redirectUserToLoginHere();
}
}

$.ajax({

success: yourFunctionHere,

error: errHandler
})

然后你也许可以制作一些总是有 errHandler 的 ajax 包装器,这样你就不必在每个 ajax 调用中都放置它。

编辑:

经过一些实验,如果“ajaxSend”处理程序抛出错误,则将永远不会发送原始请求。

此外,如果处理程序确实如此

document.location = '/login';

那么原始请求永远不会发送。

希望对您有所帮助:)

关于javascript - Ajax - 我需要在每个 AJAX 请求之前检查是否存在有效 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1303795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com