与标题相同,在我的配置中:
'session' => array(
'class'=>'CHttpSession',
'timeout'=> 1200,
'autoStart'=>true,
),
在我的代码中:
$ssKey = 'MY_SS_KEY';
if (isset(Yii::app()->session[$ssKey])) {
$this->jobWithSession();
} else {
$this->jobWithNotSession();
Yii::app()->session[$ssKey] = 'ok';
}
第一次,它调用函数jobWithNotSession(),但是在超过1200s(20分钟)后,仍然调用函数jobWithNotSession,这有什么不对?有人可以帮帮我吗?
答案 0 :(得分:2)
为了使Yii会话超时起作用,您应该执行以下操作:
在protected / config / main.php中:
'components'=>array(
'session' => array(
'class' => 'CDbHttpSession', //Set class to CDbHttpSession
'timeout' => 1800, //Any time, in seconds
),
),
1800是您的时间段将处于活动状态的时间(以秒为单位)。 将类设置为CDbHttpSession非常重要。
答案 1 :(得分:0)
您在此处使用了错误的功能。会话超时仅适用于调用php垃圾收集器时,远离每个页面视图。它与gc_probability
- 设置有关。所以这不是你想要使用的。只要它不运行,会话仍然存在(即使已过期)并且用户仍然登录。
你想要的是“删除”autoLogin cookie,你可以通过控制它的持续时间来做。
所以基本上你需要改变的是CWebUser::login()
- 函数的duration
参数。