Тайм-аут сеанса не работает для CHttpSession в среде Yii
Я создаю веб-приложение в Yii . Я пытался сделать время ожидания сеанса, если пользователь простаивает в течение 30 минут. После этого он должен снова войти в систему... но это не работает. Я использую CHttpSession. Однако, если я даю CDbHttpSession вместо CHttpSession, это работает нормально.
это мой код
'user' => array(
'class' => 'WebUser',
'loginUrl' => array('site/loginaccount'),
'allowAutoLogin' => true,
),
// uncomment the following to enable URLs in path-format
'session' => array(
'class'=>'CHttpSession',
'timeout'=>$params['session_timeout'],
'autoStart'=>true,
),
Есть ли что-нибудь еще, чтобы сделать эту работу для CHttpSession? По некоторым причинам я не могу использовать CDbHttpSession в моем веб-приложении.
4 ответа
Если вы хотите, чтобы пользователь автоматически выходил из системы через 30 минут, попробуйте:
'user' => array(
'class' => 'WebUser',
'loginUrl' => array('site/loginaccount'),
'allowAutoLogin' => true,
'authTimeout' => 1800
),
protected/config/main.php: (определить время ожидания сеанса)
$sessionTimeout = 5; // 5 secondes
return array(
'params'=>array(
'session_timeout'=> $sessionTimeout,
);
'components'=>array(
'session' => array(
'class' => 'CDbHttpSession',
'timeout' => $sessionTimeout,
),
),
);
protected / views / layout / main.php: (определить обновление)
<html>
<head>
<?php if (!Yii::app()->user->isGuest) {?>
<meta http-equiv="refresh" content="<?php echo Yii::app()->params['session_timeout'];?>;"/>
<?php }?>
</head>
<body>
…
</body>
</html>
Я прочитал исходный код CHttpSession. Это обертка PHP-сессии. Итак, механизм CHttpSession такой же, как и в PHP Session.
public function setTimeout($value)
{
ini_set('session.gc_maxlifetime',$value);
}
Выше приведен код установки времени ожидания. это просто настройка ini настроек PHP. И согласно документации PHP сессии, после maxlifetime, сессия просто "потенциально очищена", не обязательно.
И вероятность этого может быть установлена с помощью session.gc_probability. значение по умолчанию равно 1, что означает 1%. Таким образом, вы можете установить его равным 100, запускать процесс сбора мусора при каждом запуске сценария.
измените настройку на
'session' => array(
'class'=>'CHttpSession',
'timeout'=>$params['session_timeout'],
'autoStart'=>true,
'gCProbability' => 100,
),
Надеюсь, поможет.
return array('components'=>array(
'session'=>array(
'timeout' => 1800
),
),
);