我的目标是销毁已登录的已使用会话并强制他再次登录,如果他闲置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. 答案 0 :(得分:0)
在这种情况下,为什么不使用session.gc_maxlifetime
?
session.gc_maxlifetime指定数据被视为“垃圾”并可能被清除的秒数。会话开始时可能会收集垃圾(取决于session.gc_probability和session.gc_divisor)。
只需使用:
ini_set('session.gc_maxlifetime',20);