2013-05-29 72 views
1

我在我的web應用程序中遇到會話變量問題。 問題是我用下面的代碼來設置它,並檢查它是否存在,只有在沒有的時候我才更新它。在Yii刷新後會話變量丟失索引

這個想法是知道用戶是否是企業或他的會話。

我使用下面的代碼:

 $logo_class = "logo"; 

     if(!Yii::app()->user->isGuest) { 
      define("ENT_LIM_PROD_COUNT", 10000); 

      $user_id = Stores::model()->findByPk(Products::model()->getStoreID())->user_id; 

      if(array_key_exists('is_enterprise', Yii::app()->session)) { 
       if(Yii::app()->session['is_enterprise'] === true) 
        $logo_class = "logo_ent"; 
      } else { 
       $total_prod = LicenseMngr::getFeatureAllocTotal($user_id, LicenseMngr::FEATURE_PRODUCTS); 
       Yii::app()->session['is_enterprise'] = ($total_prod > ENT_LIM_PROD_COUNT ? true : false); 

       if(Yii::app()->session['is_enterprise'] === true) 
        $logo_class = "logo_ent"; 
      } 
     } 

我曾嘗試使用不同類型的在我的配置文件中的會話,現在是:

 'session'=>array(
      'autoStart' => true, 
      'sessionName' => 'session', 
      'timeout' => 30758400 
     ), 

現在的問題是,每次我刷新索引「is_enterprise」的頁面不在會話數組中,就好像它從未設置過一樣。

我已經嘗試將會話保存目錄更改爲/ var/tmp。

我運行:

Darwin niflheim 12.3.0 Darwin Kernel Version 12.3.0: Sun Jan 6 22:37:10 PST 2013; root:xnu-2050.22.13~1/RELEASE_X86_64 x86_64 

PHP Version 5.4.15 (web) 

以下行不休息調用一個服務器,以獲得我們需要的信息(這可能是不相關誼這裏的唯一的事情):

$total_prod = LicenseMngr::getFeatureAllocTotal($user_id, LicenseMngr::FEATURE_PRODUCTS); 

PS:這不是唯一的自定義變量,我希望這有助於。

+1

您可能想要使用setState,以便將信息保存在名爲States的會話數據中。 – JorgeeFG

+0

好吧,現在它更好,但問題是它只在刷新頁面一次後纔會第一次保存值。我用Yii :: app() - > user-> getState(「is_enterprise」,false)和Yii :: app() - > user-> setState(「is_enterprise」,true | false)替換了所有會話調用。 – Odinn

+1

你不需要使用getState,只需要使用Yii :: app() - > user-> stateID,它使用魔術getter和setter,如果你使用is_enterprise = something,它會改變值,否則它會返回值持有。 – JorgeeFG

回答

0

OK所以過了一段時間,我們能夠解決問題......顯然,YII中的會話變量不是數組,而是一個對象,您可以將它作爲數組訪問,所以array_key_exists不起作用。

將其更改爲isset解決了問題。