1

Web アプリのセッション変数に問題があります。問題は、次のコードで設定し、存在するかどうかを確認し、存在しない場合にのみ更新することです。

アイデアは、ユーザーがエンタープライズであるか、セッションに参加していないかを知ることです。

次のコードを使用します。

        $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

わかりましたので、しばらくすると問題を解決できました... どうやら YII のセッション変数は配列ではなくオブジェクトであり、配列としてアクセスできるため、array_key_exists は機能しませんでした。

それを isset に変更すると、問題が解決しました。

于 2013-05-30T09:36:47.820 に答える