1

我的目标是销毁已登录使用的会话,并在他空闲 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分钟,它不起作用!

供参考:

4

1 回答 1

0

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

session.gc_maxlifetime 指定数据将被视为“垃圾”并可能被清理的秒数。垃圾收集可能在会话开始期间发生(取决于 session.gc_probability 和 session.gc_divisor)。

只需使用:

ini_set('session.gc_maxlifetime',20);
于 2013-05-29T15:52:05.227 回答