2012-10-12 47 views
20

我已經包括我們下面的Yii配置文件的培訓相關部分:Yii的用戶被註銷被設置爲至少1

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

我也一直到PHP .ini並設置session.gc_maxlifetime = 86400但這仍然沒有解決問題。

目前,我絕對不知道什麼可能會導致它超時並在大約15-30分鐘不活動之後將用戶註銷。理想情況下,用戶應保持登錄狀態至少一天不活動(並關閉瀏覽器窗口,允許瀏覽器首選項)。

我已經瀏覽谷歌,Yii和堆棧溢出,只是找不到任何我忽略的東西......但顯然我忽略了一些東西。如果有人能幫助我,我會非常感激。


的,我們正在使用登錄用戶的典型代碼樣品要求及以下包括:

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

這是相當典型的是Yii::app()->user->login()叫任何時候


從Chrome瀏覽器,這裏是我爲該網站及其到期日期(在清除所有cookies並登錄後)所擁有的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 
+1

檢查您是否使用Yii :: app() - > user-> login方法設置會話時間? – Arfeen

+0

當我們登錄用戶時,我們沒有設置會話時間 –

+1

我想你是如何登錄你的用戶在這裏很重要,你可以顯示一點代碼? –

回答

14

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

感謝來自Arfeen誰向我指出了正確的方向幫助,除非你設置的Yii::app()->user->login()第二個參數事實證明,Yii中不會使用永久性Cookie,作爲第二個參數默認爲0.這個默認的0值將覆蓋您可能設置的超時時間。

+0

是這就是爲什麼我要求檢查它。但是,您是否檢查了yii應用程序用戶的isGuest財產所獲得的價值? 並歡迎:) – Arfeen

+0

是的isGuest屬性工作正常,我們使用相當廣泛。 –

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

,並添加這些在配置main.php文件中:

'PARAMS'=>數組( 'sessionTimeoutSeconds'=> 1800,//30分鐘)

+0

以上代碼如何在yii2中 –

-2

對於Yii2版本

在你/config/params.php設置以秒超時:

'sessionTimeoutSeconds' => '1800', 

在你控制器/ SiteController.php actionLogin()方法增加以下內容:

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

還要在SiteController中添加beforeAction方法。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; 
    } 
} 

在您的views/layouts/main.php中:在頭DOM之間添加自動刷新標題以將應用程序發回到登錄視圖。

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

對於Yii2

該解決方案後,登錄會話cookie設置後7天到期時間:

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

我有一個相同的問題,即使我做authTimeout 3600 * 24 (24小時)用戶仍然在約30分鐘內註銷。 我發現,在php.ini中有一個選項:

的session.gc_maxlifetime

默認選項這是24分鐘,所以我改變什麼,我需要

會議.gc_maxlifetime = 86400

24小時。問題解決了我。

希望這可以幫助別人!

相關問題