在我使用的页面中,有一个加载了ajax的内容到<div>
。项目中的所有页面都在登录时受到保护。根据逻辑,如果用户将窗口保持空闲300秒或更长时间,PHP将重定向到登录页面。这在页面刷新和导航时很有用。但是我面临的问题是,当我加载<div>
或任何带有AJAX输出的元素时,有时会在元素中加载登录页面。这是因为窗口处于空闲状态,PHP服务器重定向到登录页面。我需要将主页面重定向到登录页面,而不是通过AJAX加载重定向的登录页面。想法。
PHP检查上次活动并重定向如果&gt; 300秒,
if(isset($_SESSION['active_last']))
{
if((time()-$_SESSION['active_last'])>300)
{
$_SESSION['toredirect']=$_SERVER['REQUEST_URI'];
$rd_loc=BASEPATH."login/?error=timeout";
header("location: $rd_loc");
}
$_SESSION['active_last']=time();
}
答案 0 :(得分:7)
这是常见问题,因为AJAX请求会将响应附加到您要显示的位置。你需要自己处理它。这是我的解决方案,在Session过期的情况下,请求是AJAX我返回状态代码401然后这是我在全球级别处理它的方式。我已将此代码放在母版页/模板中。
$(document).ajaxError(function (event, jqxhr, settings, exception) {
if (jqxhr.status === 401) {
alert('Session is expired. Login again');
window.location.href = '../Admin/Signout.php';
}
});
答案 1 :(得分:0)
这有点困难。浏览器处理重定向到登录页面,因此使用ajaxError处理错误不会起作用。所有迹象都是javascript请求成功。如果您可以在响应中查找唯一的标识登录页面的内容,则可以添加以下内容:
$.ajaxSetup({
dataFilter:function(data, type) {
var match = data.match (/some regex that will only match login page/);
if (match!=null) {
window.location.href = '/login.php';
}else {
return data;
}
}
});