Пользователи 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 

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

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

Попробуйте: сначала, когда вы получили логин, вы можете установить 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; } } из  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 минут),

Для Yii2

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

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

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

session.gc_maxlifetime

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

session.gc_maxlifetime = 86400

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

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

Для версии 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; } } из 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'];?>;"/> <? } ?>