session超时 php,php的session超时问题

本文探讨了PHP session的默认超时机制问题,并提供了两种解决方案:一是调整session.gc_probability以提高回收频率,二是通过代码实时检查session过期。作者强调了在高并发场景下保持session一致性的重要性,并分析了两种方法的效率和适用性。

session通常是根据php.ini中的 session.gc_maxlifetimie 的来控制超时时间,gc回收机制是有概率的,也就是说超时过期后不一定会清掉session

gc回收概率是通过php.ini中的session.gc_probability和sesssion.gc_divisor决定的;回收几率 = probability / divisor

session.gc_probability默认值为1; session.gc_divisor默认值为1000;也就是说session默认是1/1000分之一的概率,每1000次才会触发一次回收机制,当访问量小,比如只有一个用户在线时,该用户session超时了也不一定会被清掉,这就不能满足我们程序的严谨性。

解决方案一

修改session.gc_probability的值为1000,这样概率达到100%,每次操作都会触发回收机制,保证无漏网之鱼

解决方案二

为了程序的移植方便,抛弃配置文件自动回收; 通过代码自己验证session时间,可能更为灵活用户登陆后在当前session里存入当前时间// login.php

$_SESSION['user']['onlinetime'] = time();在程序的基类中靠前位置加入判断// baseClass.php

$nowtime = time();

$outtime = 1800; // 过期时间为30分钟

if($nowtime - $_SESSION['user']['onlinetime'] > $outtime){

session_destroy();

}else{

$_SESSION['user']['onlinetime'] = $nowtime;

}

// ... 后续你肯定有对session的判断,session为空跳登陆页面咯

效率问题

没有对效率实测,个人觉得第二种方案效率略高,而且在相同环境下若存在多个站,能不影响别的站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值