您的位置:首页 > 编程语言 > PHP开发

php 如何设置一个严格控制过期时间的session

2017-05-25 00:00 232 查看
1、php session 有效期

PHP的session有效期默认是1440秒(24分钟),如果客户端超过24分钟没有刷新,当前session会被回收,失效。
当用户关闭浏览器,会话结束,session也会失效。

2、修改session有效期的方法

php.ini的session.gc_maxlifetime来设置session的生命周期

session“回收”何时发生:

默认情况下,每一次php请求,就会有1/100的概率发生回收,所以可能简单的理解为“每100次php请求就有一次回收发生”。这个概率是通过以下参数控制的

#概率是gc_probability/gc_divisor

session.gc_probability = 1

session.gc_divisor = 100

注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。

注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:

3、控制session过期方法

3.1、使用memcache/Redis来保存session,设置过期时间,因为memcache/redis的回收机制不是按机率的,可以确保session过期后失效

3.2、使用纯php控制过期,

原理:通过将session的key存储单纯的session值外,改用存储数组(session值+一个时间戳)的方法,但使用时判断时间戳是否大于设定值,从而严格的控制session的过期

​
<?php
/**
* Session控制类
*/
class Session{

/**
* 设置session
* @param String $name   session name
* @param Mixed  $data   session data
* @param Int    $expire 超时时间(秒)
*/
public static function set($name, $data, $expire=600){
$session_data = array();
$session_data['data'] = $data;
$session_data['expire'] = time()+$expire;
$_SESSION[$name] = $session_data;
}

/**
* 读取session
* @param  String $name  session name
* @return Mixed
*/
public static function get($name){
if(isset($_SESSION[$name])){
if($_SESSION[$name]['expire']>time()){
return $_SESSION[$name]['data'];
}else{
self::clear($name);
}
}
return false;
}

/**
* 清除session
* @param  String  $name  session name
*/
private static function clear($name){
unset($_SESSION[$name]);
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: