我使用jquery,css和html构建了一个网站。我使用ajax调用从我的服务器上的平面文件中检索数据并绘制图表。问题是有一个身份验证供应商应用程序,用户必须进行身份验证才能访问该站点。此供应商应用程序有30分钟的空闲时间,如果用户在30分钟内没有执行任何操作,则会超时。
问题在于,当它发生时,页面不会按预期进入登录页面。
我认为我需要进行服务器端调用以强制我的页面通过登录页面。
我已创建此脚本执行服务器调用以强制页面获取登录页面,但它似乎不起作用。
我有什么想法可以解决这个问题?这是我的剧本:
<script>
$(document).ready(function(){
function continueSession() {
setTimeout(function(){
$.get("somepage.php").always(continueSession);
},30*1000);
}
continueSession();
});
</script>
somepage.php是服务器上的虚拟文件,不执行任何操作。有没有更好的方法呢?
答案 0 :(得分:1)
在发出ajax请求时,只需检查响应代码即可。如果收到错误,请将用户发送到登录页面。
$.get("somepage.php").always(function (response) {
// check response code
if (response.status !== 200) {
// did not succeed. redirect to loging page
window.location.replace("login_page.php");
return;
}
// response is ok
});
您还可以使用响应中的location
标头来确定重定向的位置。
$.get("somepage.php").always(function (response) {
// check if it's a redirect (300 code)
if (Math.round(response.status / 100.0) * 100 === 300) {
// redirect to the location header
window.location.href = response.getResponseHeader("location");
return;
}
});
您可以执行以下操作来检查间隔
var checkSession = function () {
var isRedirect = function (code) {
return Math.round(code / 100.0) * 100 === 300;
};
$.ajax({
type : "HEAD", // https://ochronus.com/http-head-request-good-uses/
async : true,
url : "somepage.php",
success: function (_, _, response) {
if (isRedirect(response.code)) {
window.location.href = response.getResponseHeader("location");
}
}
});
};
$(function () {
// check the session every 30 seconds
setInterval(checkSession, 30*1000);
});