cakePHPのセッションでハマる
3月 21st, 2008 Posted in PHP, cakePHPcakePHPを使って簡単なサイトを作っているんですが、セッションまわりで謎が多いのでちょっとまとめます。(自分用)
まず、セッションに入れたはずなのに画面遷移するとデータがなくなっている現象から。
HogeControllerのDoSomethingというアクションで、次のようにセッションにデータを入れます。
-
$this->Session->write( 'search_category', $category );
-
$this->Session->write( 'search_word', $word );
そしてDoSomethingのviewでは、DoOtherへリンクしているとします。
アクションDoOtherでセッションを確認すると、次のようになっていました。
-
[search_category]=;
-
[search_word]=;
DoSomethingで入れた値がDoOtherでは消えています。しかしキーは残っています。
cakePHPのフォーラムで次のようなスレッドを発見。
"cake1.1.18にversionアップしたらSessionが使えない?" フォーラム - CakePHP Users in Japan
どうやらCAKE_SECURITYがhightだとセッション開始のたびに
-
$this->renew();
が呼ばれ
されてしまうようです。
なのでとりあえずCAKE_SECURITYをmediumに変更。
んが、これでも問題は解決せず。
んで、同じくcakePHPフォーラムで次のようなスレッドを発見。
"セッションまわりの挙動がおかしい?時" フォーラム - CakePHP Users in Japan
viewで使っている画像のパスがrelative(相対パス?)だったら、アクションが複数回呼ばれることがあるらしい。
開発中のサイトでは、コントローラの$layoutは\cake\libs\view\templates\layouts\default.thtmlを\app\views\layouts\default.thmlにコピーしてレイアウトに関する部分だけ変更して使っていたので、
-
<link rel="shortcut icon" href="<?php echo $this->webroot . 'favicon.ico'; ?>" type="image/x-icon" />
の部分を削除するとDoOtherでもセッションから正しいデータを取得することができました。
もう一つセッションに関する問題があるんですが、長くなりそうなので別記事で。
