1

我的网络应用程序中的会话变量有问题。问题是我用下面的代码设置它并检查它是否存在,只有如果不存在,我才更新它。

这个想法是为了知道用户是否是他的会话的企业。

我使用以下代码:

        $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);

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

4

1 回答 1

0

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

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

于 2013-05-30T09:36:47.820 回答