Тайм-аут сеанса не работает для 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
        ),
    ),
);
Другие вопросы по тегам