WindowsプログラマのWebアプリへの挑戦日記。あとパンとか。

cakePHPのセッションでハマる

3月 21st, 2008 Posted in cakePHP, PHP

cakePHPを使って簡単なサイトを作っているんですが、セッションまわりで謎が多いのでちょっとまとめます。(自分用)

まず、セッションに入れたはずなのに画面遷移するとデータがなくなっている現象から。

HogeControllerのDoSomethingというアクションで、次のようにセッションにデータを入れます。

  1. $this->Session->write( 'search_category', $category );
  2. $this->Session->write( 'search_word', $word );

そしてDoSomethingのviewでは、DoOtherへリンクしているとします。

アクションDoOtherでセッションを確認すると、次のようになっていました。

  1. [search_category]=;
  2. [search_word]=;

DoSomethingで入れた値がDoOtherでは消えています。しかしキーは残っています。

cakePHPのフォーラムで次のようなスレッドを発見。
“cake1.1.18にversionアップしたらSessionが使えない?” フォーラム – CakePHP Users in Japan

どうやらCAKE_SECURITYがhightだとセッション開始のたびに

  1. $this->renew();

が呼ばれ

  1. 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にコピーしてレイアウトに関する部分だけ変更して使っていたので、

  1. <link rel="shortcut icon" href="<?php echo $this->webroot . 'favicon.ico'; ?>" type="image/x-icon" />

の部分を削除するとDoOtherでもセッションから正しいデータを取得することができました。

もう一つセッションに関する問題があるんですが、長くなりそうなので別記事で。

こちらもオススメ!

Trackback URL

Post a Comment