web-dev-qa-db-ja.com

Yiiセッションタイムアウトが少なくとも1日に設定されているにもかかわらず、15〜30分後にユーザーがログアウトされる

以下の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分間操作がないとユーザーをログアウトさせることができるかについて完全に途方に暮れています。理想的には、ユーザーは少なくとも1日間非アクティブな状態でログインしたままにしておく必要があります(ブラウザのウィンドウを閉じて、ブラウザの設定で許可します)。

私はグーグル、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です(すべての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
_
22
Tom Busby

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

正しい方向に私を向けたArfeenの助けのおかげで、Yii::app()->user->login()の2番目のパラメーターを設定しない限り、Yiiは永続的なCookieを使用しないことがわかります。 2番目のパラメーターのデフォルトは0です。このデフォルトの0値は、タイムアウトを使用するために設定した他のすべてのものをオーバーライドします。

15
Tom Busby

AuthTimeoutを3600 * 24(24時間)にしても、ユーザーがまだ約30分でログアウトするのと同じ問題がありました。私はphp.iniにオプションがあることを発見しました:

session.gc_maxlifetime

デフォルトではこのオプションは24分なので、必要なものに変更しました

session.gc_maxlifetime = 86400

24時間。問題は解決しました。

これが誰かを助けることを願っています!

2

これを試してください:ログインしたときに最初に設定できますsetStateこれ:

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

これらはテキスト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 main.phpファイルに追加します:

'params' => array( 'sessionTimeoutSeconds' => 1800、// 30分)、

Yii2の場合

セッションCookieのログイン後のこのソリューションは、7日後に有効期限を設定します。

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