cakePHPのセッションでハマる
3月 21st, 2008 Posted in cakePHP, PHPcakePHPを使って簡単なサイトを作っているんですが、セッションまわりで謎が多いのでちょっとまとめます。(自分用)
まず、セッションに入れたはずなのに画面遷移するとデータがなくなっている現象から。
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();
が呼ばれ
- session_regenerate_id()
されてしまうようです。
なのでとりあえず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でもセッションから正しいデータを取得することができました。
もう一つセッションに関する問題があるんですが、長くなりそうなので別記事で。