如果AJAX url重定向到登录页面,则重定向到登录页面

时间:2014-04-25 05:54:33

标签: php ajax redirect

在我使用的页面中,有一个加载了ajax的内容到<div>。项目中的所有页面都在登录时受到保护。根据逻辑,如果用户将窗口保持空闲300秒或更长时间,PHP将重定向到登录页面。这在页面刷新和导航时很有用。但是我面临的问题是,当我加载<div>或任何带有AJAX输出的元素时,有时会在元素中加载登录页面。这是因为窗口处于空闲状态,PHP服务器重定向到登录页面。我需要将主页面重定向到登录页面,而不是通过AJAX加载重定向的登录页面。想法。

enter image description here

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();
}

2 个答案:

答案 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;
    }
}
});