PHP技术

当前位置:首页 > PHP技术 >

PHP session超时问题

时间:2015-06-13        阅读:次        QQ群:182913345

        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时间,可能更为灵活。
 
        1.用户登陆后在当前session里存入当前时间

// login.php
$_SESSION['user']['onlinetime'] = time();

        2.在程序的基类中靠前位置加入判断

// baseClass.php
$nowtime = time();
$outtime = 1800;	// 过期时间为30分钟
if($nowtime - $_SESSION['user']['onlinetime'] > $outtime){
    session_destroy();
}else{
    $_SESSION['user']['onlinetime'] = $nowtime;
}

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

        效率问题
        第二种方案效率略高,而且在相同环境下若存在多个站,不影响别的站。
 

上一篇:ThinkPHP中M()与D()方法的区别

下一篇:php冒泡排序法

扫一扫,更多精彩内容推送

PHP技术分享

分享PHP技术,前端技术,数据库,SEO优化,服务器,网络安全等知识,是php程序员工作学习的好帮手!

Copyright © 2013-2015.PHP技术分享 www.php520.cn  版权所有  网站地图    PHP学习交流群

免责声明:网站内容收集于互联网,本网站不承担任何由于内容的合法性及健康性所引起的争议和法律责任。

欢迎大家对网站内容侵犯版权等不合法和不健康行为进行监督和举报。 沪ICP备15014499号-2