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:這不是唯一的自定義變量,我希望這有助於。
您可能想要使用setState,以便將信息保存在名爲States的會話數據中。 – JorgeeFG
好吧,現在它更好,但問題是它只在刷新頁面一次後纔會第一次保存值。我用Yii :: app() - > user-> getState(「is_enterprise」,false)和Yii :: app() - > user-> setState(「is_enterprise」,true | false)替換了所有會話調用。 – Odinn
你不需要使用getState,只需要使用Yii :: app() - > user-> stateID,它使用魔術getter和setter,如果你使用is_enterprise = something,它會改變值,否則它會返回值持有。 – JorgeeFG