PHP中解决ajax请求session过期退出登录问题

PHP判断一个请求是Ajax请求还是普通请求


1、session过期,如果直接是url请求,或者用户在打开的系统页面中直接清除缓存及cookie信息,可直接在php的入口文件中调用以下封装的方法,进行session信息判断以及页面的跳转,如:

if(empty($_SESSION['sessionid']) || empty($_COOKIE['PHPSESSID'])){

    echo "<script>";
    echo "alert('用户过期,请重新登陆!');";
    echo "parent.window.parent.window.location.href = '/index.php';";
    echo "</script>";

}


2、如果是页面保持着,但是10分钟之内没有做任何操作,页不知道是否过期,点击操作按钮,例如保存等,ajax请求已经进行,将会把页面的html打印出来,不能正常的弹出提示窗口,跳转到登陆页。

项目中进行ajax请求的操作很多,ajax的操作已经进行不能中断,不可能在每个ajax请求中都调用我们封装好的判断session是否过期的逻辑,将增加工作负担。我考虑在php的入口代码中调用已经封装好的session过期判断,其返回标识如 echo "timeout";exit;

在引用的jquery.js库中找到.ajax中调用的done方法,补充一下逻辑判断,解决了ajax请求SESSION过期页面跳转问题。

if(response == "timeout"){
       alert('SESSION信息已过期,请重新登陆!');
       parent.window.parent.window.location.href = '/index.php';
       return;
}

php封装的判断session是否过期的方法:

function checkSession(){

    if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){          
        //is ajax
        if(empty($_SESSION['sessionid'])){
            echo "timeout";
            exit;
        }
    }
    elseif(empty($_SESSION['sessionid']) || empty($_COOKIE['PHPSESSID'])){
        echo "<script>";
        echo "alert('用户过期,请重新登陆!');";
        echo "parent.window.parent.window.location.href = '/index.php';";
        echo "</script>";
    }

}


转载于:https://my.oschina.net/junn/blog/150236

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值