Подтвердить что ты не робот

Пользователи Yii выходят из системы через 15-30 минут, несмотря на то, что тайм-ауты сеанса установлены как минимум на 1 день

Я включил релевантные части нашего конфигурационного файла Yii ниже:

return array(
...
    'components'=>array(
        'session' => array(
            'timeout' => 86400,
        ),
        'user'=>array(
            'allowAutoLogin' => true,
            'autoRenewCookie' => true,
            'authTimeout' => 31557600,
        ),
    ...
    ),
...
);

Я также попал в php.ini и установил session.gc_maxlifetime = 86400, но это еще не устранило проблему.

В настоящее время Im абсолютно не понимает, что еще может привести к таймауту и ​​вывести пользователя из системы примерно через 15-30 минут бездействия. В идеале пользователи должны оставаться в системе как минимум на день бездействия (и не закрывать окно браузера, разрешая предпочтения браузера).

Я трал Google, Yii и переполнение стека и просто не могу найти ничего, что я пропускаю... но, очевидно, я что-то пропускаю. Если кто-нибудь сможет мне помочь, я буду очень благодарен.


Образец типичного кода, который мы используем для входа в систему пользователей, был запрошен и приведен ниже:

$identity = new UserIdentity('facebook', $id, $user->name, $user->email);
$loggedIn = Yii::app()->user->login($identity);
$this->subscriptionChecker->updateCurrentUserSubscribed();

Это довольно типично в любое время, когда Yii::app()->user->login() называется


Из Chrome, вот куки, которые у меня есть для сайта, и их срок действия (после очистки всех файлов cookie и просто входа в систему):

PHPSESSID expires When the browsing session ends

// I'm informed these are set by google analytics  
__utma created Friday, 12 October 2012 14:05:31 expires Sunday, 12 October 2014 14:05:31

__utmb created Friday 12 October 2012 14:05:31 expires Friday 12 October 2012 14:35:31,

__utmc created Friday, 12 October 2012 14:05:31 expires When the browsing session ends

__utmz created Friday 12 October 2012 14:05:31 expires Saturday 13 April 2013 02:05:31  
// end google analytics
4b9b3361

Ответ 1

http://www.yiiframework.com/doc/api/1.1/CWebUser#login-detail

Благодаря помощи Арфина, который указал мне в правильном направлении, если вы не установили второй параметр Yii::app()->user->login(), оказалось, что Yii не будет использовать постоянный файл cookie, так как второй параметр по умолчанию равен 0. Это значение по умолчанию 0- значение переопределяет все, что вы могли бы установить с таймаутами.

Ответ 2

Попробуйте следующее: первый когда вы получили логин, вы можете установить setState это:

yii::app()->user->setState('userSessionTimeout', time() + Yii::app()->params['sessionTimeoutSeconds']); 

добавить это text companents.controller.php

 public function beforeAction(){
            // Check only when the user is logged in
            if ( !Yii::app()->user->isGuest)  {
               if ( yii::app()->user->getState('userSessionTimeout') < time() ) {
                   // timeout
                   Yii::app()->user->logout();
                   $this->redirect(array('/site/login'));  //
               } else {
                   yii::app()->user->setState('userSessionTimeout', time() + Yii::app()->params['sessionTimeoutSeconds']) ;
                   return true; 
               }
            } else {
                return true;
            }
        }

и добавьте их в файл config.php config:

'params' = > array ('sessionTimeoutSeconds' = > 1800,//30 минут),

Ответ 3

Для Yii2

Это решение после входа в систему для сессионных файлов cookie устанавливает время истечения срока действия через 7 дней:

'components' => [
    'session' => [
        'class' => 'yii\web\Session',
        'cookieParams' => ['lifetime' => 7 * 24 *60 * 60]
    ],

Ответ 4

У меня была идентичная проблема, даже если я делаю authTimeout 3600 * 24 (24 часа), пользователь все еще делает выход из системы за 30 минут. Я обнаружил, что на php.ini есть опция:

session.gc_maxlifetime

по умолчанию эти параметры составляют 24 минуты, поэтому я изменил то, что мне нужно

session.gc_maxlifetime = 86400

24 часа. Проблема решена для меня.

Надеюсь, это поможет кому-то!

Ответ 5

Для версии Yii2

В вашем /config/params.php установите тайм-аут в секундах:

'sessionTimeoutSeconds' => '1800',

В вашем контроллере /SiteController.php actionLogin() добавьте следующее:

// Set the user session timeout
Yii::$app->session->set('userSessionTimeout', time() + Yii::$app->params['sessionTimeoutSeconds']);

Также добавьте метод beforeAction в SiteController.php

public function beforeAction($action)
{

    if (!parent::beforeAction($action)) {
        return false;
    }

    // Check only when the user is logged in
    if ( !Yii::$app->user->isGuest)  {
        if (Yii::$app->session['userSessionTimeout'] < time()) {
            Yii::$app->user->logout();
        } else {
            Yii::$app->session->set('userSessionTimeout', time() + Yii::$app->params['sessionTimeoutSeconds']);
            return true; 
        }
    } else {
        return true;
    }
}

В ваших представлениях/макетах/main.php: Между головкой DOM добавляется заголовок автоматического обновления, чтобы отправить приложение обратно в режим входа в систему.

<? if (!Yii::$app->user->isGuest) { ?>
            <meta http-equiv="refresh" content="<?php echo Yii::$app->params['sessionTimeoutSeconds'];?>;"/>
<? } ?>