22

Yii 設定ファイルの関連部分を以下に示します。

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

私もphp.iniに入って設定しsession.gc_maxlifetime = 86400ましたが、それでも問題は解決していません。

現在、約 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
4

5 に答える 5

15

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

正しい方向に私を指摘してくれた Arfeen の助けに感謝します。2 番目のパラメーターを設定しない限りYii::app()->user->login()、Yii は永続的な Cookie を使用しないことがわかります。2 番目のパラメーターのデフォルトは 0 です。タイムアウトと関係があるように設定されています。

于 2012-10-12T14:11:34.233 に答える
1

これを試してください:ログインした最初のものは、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 分 ),

于 2014-12-03T07:22:57.867 に答える
0

Yii2の場合

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

'components' => [
    'session' => [
        'class' => 'yii\web\Session',
        'cookieParams' => ['lifetime' => 7 * 24 *60 * 60]
    ],
于 2016-12-28T18:10:58.827 に答える
-1

Yii2版の場合

/config/params.php で、タイムアウトを秒単位で設定します。

'sessionTimeoutSeconds' => '1800',

controllers/SiteController.php actionLogin() メソッドに以下を追加します。

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

また、SiteController.php に beforeAction メソッドを追加します。

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;
    }
}

あなたのviews/layouts/main.phpで:head DOMの間に自動更新ヘッダーを追加して、アプリをログインビューに戻します。

<? if (!Yii::$app->user->isGuest) { ?>
            <meta http-equiv="refresh" content="<?php echo Yii::$app->params['sessionTimeoutSeconds'];?>;"/>
<? } ?>
于 2015-06-23T16:13:42.793 に答える