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に書いてくれないんだろう・・・。

*1:セッションはDB保管

*2:しかも何故か固定値