session.gc_maxlifetime 这个设置作用是什么?我百度了很多答案都看不懂,下面是我写的代码,垃圾回收几率我已经设置为100%了 为什么10面过后 磁盘文件没有删除,session数据也没有失效呢?怎么回事呢?<?php
session_start();
$_SESSION['NAME'] = 'RONG';
ini_set('session.gc_maxlifetime', 10); //设置时间
?>
session_start();
$_SESSION['NAME'] = 'RONG';
ini_set('session.gc_maxlifetime', 10); //设置时间
?>
把session.gc_probability/session.gc_divisor的机率提高,如果提到100%,就会彻底解决这个问题,但显然会对性能造成严重的影响。所以如果你需要准确的设置session过期时间,可以自己在代码中设置较好。
例如:session_start();$name = 'test';
$data = '123456';//save_session($name, $data); // 设置session
//sleep(1);
echo get_session($name); // 读取session未超时
//sleep(10);
echo get_session($name); // 读取session超时
function save_session($name,$data,$expire=10){
$_SESSION[$name] = array(
'data' => $data,
'expire' => time()+$expire
);
}function get_session($name){
if(isset($_SESSION[$name]) && $_SESSION[$name]['expire']>=time()){
return $_SESSION[$name]['data'];
}
return null;
}
但这个修改对当前的 session 是不起作用的
因为 session.gc_maxlifetime 表示的是:session 临时文件在最后访问的 session.gc_maxlifetime 秒之后可按 session.gc_probability / session.gc_divisor 的概率被删除
由于程序结束时,session 临时文件被重写,而 session.gc_maxlifetime 远未到达,所以当前临时文件没有可能被删除
不过至少在 window 中,如果 session 临时文件的存放目录不是系统的临时目录的话,session 临时文件是不会被删除的
从这个表现上看,gc 应该是操作系统的
当然 php 会在创建 session 临时文件时,先检查同名的 session 临时文件是否存在,若不存在就创建