session.gc_maxlifetime 这个设置作用是什么?我百度了很多答案都看不懂,下面是我写的代码,垃圾回收几率我已经设置为100%了  为什么10面过后 磁盘文件没有删除,session数据也没有失效呢?怎么回事呢?<?php
session_start();
$_SESSION['NAME'] = 'RONG';
ini_set('session.gc_maxlifetime', 10); //设置时间
?>

解决方案 »

  1.   

    gc_maxlifetime只能保证session生存的最短时间,并不能够保证在超过这一时间之后session信息立即会得到删除。因为GC是按机率启动的,可能在某一个长时间内都没有被启动,那么大量的session在超过gc_maxlifetime以后仍然会有效。 
    把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;
    }
      

  2.   

    虽然 session.gc_maxlifetime 可在程序中被修改(Changeable = PHP_INI_ALL)
    但这个修改对当前的 session 是不起作用的
    因为 session.gc_maxlifetime 表示的是:session 临时文件在最后访问的 session.gc_maxlifetime 秒之后可按 session.gc_probability / session.gc_divisor 的概率被删除
    由于程序结束时,session 临时文件被重写,而 session.gc_maxlifetime 远未到达,所以当前临时文件没有可能被删除
      

  3.   

    你了解下关于这个session.gc_maxlifetime 的用法吧http://www.cnblogs.com/hongfei/archive/2012/06/17/2552434.html
      

  4.   

    @xuzuning 那么这个gc 机制是什么时候触发的?  是session_start() 的时候吗?还是什么时候?
      

  5.   

    应该是session_start() 的时候不过我也不是很清楚,因为没有去看过源码
    不过至少在 window 中,如果 session 临时文件的存放目录不是系统的临时目录的话,session 临时文件是不会被删除的
    从这个表现上看,gc 应该是操作系统的
      

  6.   

    @xuzuning  嗯 gc有效期过期了  但是呢 浏览器cookie那边存着  下次访问又带来了 ,怎么回事呢?只有在浏览器上禁止接受第三方cookie才能体现 过期 gc删除。
      

  7.   

    只要执行到 session_start(); 那么 session 临时文件就存在了
    当然 php 会在创建 session 临时文件时,先检查同名的 session 临时文件是否存在,若不存在就创建
      

  8.   

    session.cookie_lifetime:代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废