会话变量在Yii中刷新后丢失索引

时间:2013-05-29 15:38:50

标签: php session 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)

以下行对服务器进行休息调用以获取我们需要的信息(这可能是与YII无关的唯一内容):

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

P.S:这不是它发生的唯一自定义变量,我希望有所帮助。

1 个答案:

答案 0 :(得分:0)

好了所以过了一会儿我们就能解决问题了......显然YII中的会话变量不是数组而是对象,你可以将它作为数组访问,这样array_key_exists就不起作用。

将其更改为isset解决了问题。