スパイスラボ神部です。
なんだか CakePHP で認証なりセッションなりで悩まされるとき、原因をたどっていくと結構 core.php の Security 設定を high にしていることが原因だったりすることがあるので不思議に思っていたのですが、隙を見て akiyan さんにちらっと聞いてみたらやっぱり『Security.level::high はできない子』らしいので、いい機会だと思ってここにまとめてみます。
Security.level が high のときに起きるいろいろなこと
-CakePHPの Security.levelとセッション - あぁ そうだった
Security.levelがhighに設定されていると、セッション「ID」は毎回生成されるのがCakePHPの仕様。
モバイルサイトを作成するときには要注意ですね。大元をたどれば CookBook にも書かれています。
-CakePHPコアの環境設定変数 :: Configurationクラス :: 環境設定 :: CakePHPによる開発 :: マニュアル :: 1.2 Collection :: The Cookbook
CakePHP のセキュリティレベルを設定します。'Session.timeout' で設定されたセッションタイムアウトの基本時間に、この設定による値をかけたものが最終的な値になります。
有効な値:
'high' = x 10
'medium' = x 100
'low' = x 300'high' と 'middle' は、両方とも session.referer_check が有効になります。
'Security.level' が 'high' にセットされていた場合、 CakePHP のセッション ID はリクエストごとに再生成されます。。
-cronos feed 2.0::Security.level='high'はあんまよくない?
-CakePHPのcore.phpの設定を勉強!! - 子だぬきの技術習得ノート
セッション時間と共にここの設定で、何処までセッションを保持しているか決まります。
highの場合=CAKEPHPの内部まで
middleの場合=同一ドメインの内部まで
lowの場合=仮想ドメインなどの違うドメインでも保持しています
-3流プログラマのメモ書き : (CakePHP)携帯電話でもセッションを使えるようにする
また、Security.levelをmidiumにするとセッションタイムアウトの時間がSession.timeout*100秒になってしまいます。デフォルトの120だと 120秒*100/60=200分ということで、3時間半にもなってしまうので値を小さくします。
middle のときは middle で問題があるようですね。
-CakePHP Security コンポーネントのまとめ | Sun Limited Mt.
ブラックホールメソッドなんていうのがあるらしい。ほかにも細かな使いこなし方法が載っています。
個人的な経験より
個人的には、CakePHP で AuthComponent を使っていると、ブックマークレットからサイトにアクセスしたときになぜからリダイレクトが繰り替えされてしまって困りました。こうしてまとめてみると、ブックマークレットから起動->セッション切断->自動ログインする->でもリファラが違うドメイン(ブックマークレットからだから)なのでセッション切断->自動ログインする みたいなことになっていたのかもしれません(※その証拠に同一ドメインのページを Bookmarklet で呼び出すとこのような問題は起きませんでした)。
この場合も、Security.level を middle にしたところで解決しました。このあたりのお話はレアかもしれませんが、AuthComponent を利用するときなどには忘れずに頭に入れておきたいところです。
というか、もう medium がデフォルトでもいいのかも。
なにか理解に違いがあれば、ツッコミをお願いします。
関連記事



コメント ( 1 )
一応、こちらを紹介しておきます。http://d.hatena.ne.jp/ockeghem/20090515
デフォルト(Security.level="high")では、session_regenerate_id()がかかっています。
投稿者: sdozono | 2009年05月29日 10:17
日時: 2009年05月29日 10:17