Yii会话超时无效

时间:2014-05-16 21:42:27

标签: session yii

与标题相同,在我的配置中:

'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,这有什么不对?有人可以帮帮我吗?

2 个答案:

答案 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参数。