2009-05-16 8 views
1

私を逃す理由から、顧客の名前を含むセッション変数がしばらく表示されて消えてしまいます。 app_controller.phpではcakephp - セッション変数が奇妙な動作を続ける

:のbeforeFilter()

if (isset($_SESSION['customer_name']) == false || 
    strlen($_SESSION['customer_name']) == 0) 
{ 
    $customer = $this->Customer->read(null, $auth['User']['customer_id']); 
    $name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname']; 
    $this->Session->write('customer_name', $name); 
    $this->set('name', $this->Session->read('customer_name')); 
} 
else 
{ 
    $this->set('name', $this->Session->read('customer_name')); 
} 

Iセッションが同じ奇妙な方法で振る舞うよう

if ($this->Session->check('customer_name') == false) 

すべて設定されているかどうかを確認のバリエーションを試してみました、ビューの中に少し表示されて消えます。ブラウザを閉じたり、再度ログインしても戻ってこない。そのコードに少しずつ小さな変更を加えることで、短時間で元の状態に戻すことができます。

+0

私の答えは、私は、私が経験していた問題への答えでした私はそれを設定することができますStackOverflowを待っています。 –

答えて

0

このライン:

$name = $customer['Customer']['fname'] . " " . $customer['Customer']['lname']; 

は、それが1のstrlen関数を持ち、かつ空でないことを意味する、 "" 同じに$名を可能にします。なぜ顧客データが得られなかったのか分かりませんが、今ではその価値を確認できます。

0

問題が何であるか分かりませんが、$ _SESSION呼び出しを削除することから始めます。私も

empty($_SESSION['customer_name']) 

私は/config/core.phpにおけるセキュリティレベルを下げていると考えることができる唯一の他の事に

strlen($_SESSION['customer_name']) == 0 

を変更したい、多分あなたは完全にセッションを失っていますか?

2

cakephpはネイティブPHPが期待している場所にセッションを保存できるため、直接$ _SESSIONを呼び出す代わりに$this->Session->read()を使用してください。

また、私はあなたが同じページにとどまり、ちょうどリフレッシュし続けると、ランダムに消えたり消えたりするのであれば、「少しの間消える」ということを本当に理解していませんか?

ブラウザを閉じると、セッションが破棄される可能性があります。また、さまざまなブラウザでその動作が発生する可能性がありますか?

あなたのSession.*はapp/config/core.phpにありますか?

+0

元々私はセッションヘルパーからの読み取りとチェックを使用しましたが、事態がよりランダムになるにつれて私はそれを放棄しました。 –

0

通常、セッションはケーキで数分後に終了します。 config/core.phpのファイルに次の行を探します。

設定::書き込み(「Session.timeout」

や問題を解決する必要があります999999999を好きにそれを設定し

+0

core.phpのコメントに従ってSession.timeoutはSession.security設定を使用している場合は使用されません。その鉱山は高く設定されています。 –

+1

Session.timeoutは常に乗数として使用されます。上記のcore.phpのSecurity.levelのコメントを見ると、数学が表示されます。 –

1

これが私たちの問題を解決:

if($this->Session->check('customer_name'))