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有效期默认是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]); } }
相关文章推荐
- php 如何设置一个严格控制过期时间的session
- php 如何设置一个严格控制过期时间的session
- 如何严格设置php中session过期时间
- 如何严格设置php中session过期时间
- PHP 如何设置一个严格30分钟过期的SESSION
- 如何严格设置php中session过期时间
- 如何严格设置php中session过期时间
- 如何严格设置php中session过期时间 (转)
- 如何严格设置php中session过期时间
- 如何严格设置php中session过期时间
- 如何严格设置php中session过期时间
- 如何严格设置php中session过期时间
- 如何严格设置php中session过期时间
- 如何严格设置php中session过期时间
- 如何严格设置php中session过期时间
- 如何设置一个严格30分钟过期的Session
- 如何设置一个严格30分钟过期的Session
- 如何设置一个严格30分钟过期的Session
- 一个严格的PHP Session会话超时时间设置方法