如果用户空闲,则销毁会话

时间:2013-05-28 19:12:12

标签: codeigniter session

我的目标是销毁已登录的已使用会话并强制他再次登录,如果他闲置20分钟。这是我的方式:

  • 在每个控制器中,我都会检查:

    if(reach_idle_limit()) {
        redirect('logout');
    }
    
  • reach_idle_limit()是我的一个助手类中的辅助方法:

    function reach_idle_limit() {
    $idle_period = 1200; //20 mins
    $CI =& get_instance();
    
    
    $last_activity = $CI->session->userdata('last_activity');
    $now_time = time();
    
    //If $last_activity is not set, don't force a logout
    if($last_activity == False || $last_activity == 0){
        return false;
    }
    //If idle period exceeded: destroy the session and return true
    else if($now_time - $last_activity > $idle_period){
        $CI->session->sess_destroy();
        return true;
    }
    //else, update session's last_activity to current time, return false
    else{
        $CI->session->set_userdata('last_activity', $now_time);
        return false;
    }
    }
    

当我给$idle_period一个很小的值,例如60秒时,这很好。但是,当我给它我寻求的价值时,20分钟,它不起作用!

供参考:

  • 我正在使用ag_auth library和Codeigniter(用于身份验证部分)。
  • 我的配置变量sess_expiration设置为0.

1 个答案:

答案 0 :(得分:0)

在这种情况下,为什么不使用session.gc_maxlifetime

  

session.gc_maxlifetime指定数据被视为“垃圾”并可能被清除的秒数。会话开始时可能会收集垃圾(取决于session.gc_probability和session.gc_divisor)。

只需使用:

ini_set('session.gc_maxlifetime',20);