app側でSessionの$this->cookieLifeTimeを上書きする方法はないものか。
認証は基本的に「期限:ブラウザを閉じるまで」にしようと思っていたのですが、
Security.levelの設定がmedium以下だと、cake/以下のソースを改修しないと実装できないようです・・・
デバッグログを見ていて*1前から気になっていたこと。
セッションIDが、アクセスの度に削除、再作成されています。
調べてみるとこれは、Security.level=trueのデフォルトの挙動とのこと。
毎度セッションIDが変わるのは、地味とはいえ負荷も気になりますし、
第一モバイルサイト実装に入った際に困る。
なので、Security.level=mediumに変更してみたところ・・・
cake_sessionsの再作成はなくなりましたが、
今度はブラウザを閉じてもログアウトしない事態に。
クッキー情報を見て見ると、セッションクッキーの期限がなぜか7日間。
どこから来たのこの値 (?_?)
この設定はセッションコンポーネントの__initSession内で$this->cookieLifeTimeとしてセットされる値由来*2。
じゃあ、追加か継承のコンポーネントを作って$this->cookieLifeTimeを上書きしてやれば・・・・と思いきや、これがなまじの方法では無理。
認証絡みセッションでは、Auth-Seturity-Session3つのコンポーネントが複雑に絡み合っているので、ヘタに書き換えができません・・・・・
本線(cake/ 以下の)ソースは、できれば触りたくなかったのですが、
今回は諦めて、./cake/libs/session.php を1行改修しました・・・
Index: ./app/config/core.php.sample =================================================================== --- ./app/config/core.php.sample (revision 193) +++ ./app/config/core.php.sample (working copy) @@ -144,7 +144,7 @@ * CakePHP session IDs are also regenerated between requests if * 'Security.level' is set to 'high'. */ - Configure::write('Security.level', 'high'); + Configure::write('Security.level', 'medium'); /** * A random string used in security hashing methods. */ Index: ./cake/libs/session.php =================================================================== --- ./cake/libs/session.php (revision 193) +++ ./cake/libs/session.php (working copy) @@ -427,7 +427,9 @@ } break; case 'medium': - $this->cookieLifeTime = 7 * 86400; +// $this->cookieLifeTime = 7 * 86400; +// modified: Change LifeTime on Browser + $this->cookieLifeTime = 0;
あと問題は「次回から自動でログイン」ですが、今のところ
「入れなくてもいいかな」機能なので、とりあえず保留。
実装する際は↓の方法を参考にする予定
http://www.garacter.com/notes/CakePHP+Note:%E8%87%AA%E5%8B%95%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%9D%E3%81%AE%EF%BC%92/pi:234
しかし何故に一週間。
そして何故にcore.phpに書いてくれないんだろう・・・。