Тайм-аут сеанса не работает для 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 в своем веб-приложении.


person Mahesh Eu    schedule 21.11.2013    source источник


Ответы (4)


Если вы хотите, чтобы пользователь автоматически вышел из системы через 30 минут, попробуйте:

'user' => array(
    'class' => 'WebUser',
    'loginUrl' => array('site/loginaccount'),
    'allowAutoLogin' => true,
    'authTimeout' => 1800
),
person CreatoR    schedule 21.11.2013

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>
person Neophile    schedule 21.11.2013
comment
я знаю, что это работает для CDbHttpSession. Я ищу CHttpSession... есть идеи? - person Mahesh Eu; 21.11.2013

Я прочитал исходный код CHttpSession. Это обертка сеанса PHP. Таким образом, механизм CHttpSession такой же, как и в сеансе PHP.

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,
),

Надеюсь, поможет.

person Charles    schedule 21.11.2013

person    schedule
comment
Пожалуйста, добавьте некоторые пояснения - person gofr1; 10.05.2016