1

私にはわからない理由で、顧客の名前を含むセッション変数がしばらくの間表示され、その後消えます。

app_controller.phpの場合: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'));
}

セッションが設定されているかどうかを確認するためのバリエーションを試しました。

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

すべてが同じ奇妙な方法で動作し、しばらくの間ビューに表示されてから消えます。ブラウザを閉じたり、再度ログインしたりしても元に戻りません。そのコードへのランダムな小さな変更は、それを短期間で生き返らせるようです。

4

6 に答える 6

2

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

また、「しばらくの間消える」とはどういう意味かよくわかりません。同じページにとどまり、更新を押し続けると、ランダムに表示/消えますか?

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

Session.*app / config / core.phpでのあなたの評価は何ですか?

于 2009-05-16T20:06:30.853 に答える
1

これで問題は解決しました。

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

于 2012-10-10T12:23:04.273 に答える
0

この行:

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

$nameを""と等しくすることができます。これは、strlenが1であり、空ではないことを意味します。顧客データが取得されなかった理由はわかりませんが、その値を確認できるようになりました。

于 2009-05-16T20:13:03.693 に答える
0

FireFox 拡張機能によってセッションがリセットされる場合があることに注意してください。User-Agent が変更されるたびに、セッションはリセットされます。

最近、FirePHP と呼ばれる FireBug 拡張機能を使用してこの問題に遭遇しました:
http://blog.kevburnsjr.com/cakephp-session-error-user-agent-must-be-consistent

于 2010-03-03T23:44:19.807 に答える