CakePHP2.3.Xの Session.timeout について気づいたこと。
Authコンポーネントを使ってログイン処理を作り、1日でセッション切れを起こすようにしたのに、いつまで経ってもセッション切れによる自動ログアウトする気配がありませんでした。
そこで、Userテーブルにあるセッションの有効期限カラムのタイムスタンプを調べたところ、なぜか60日後。
60倍?
おかしいと思い調べたところ、なんと、タイムアウトに設定する数値の単位が「分」で指定するようになっていたではないですか!
普通は秒じゃないの・・・?
とりあえず、絶対に忘れる自信があるので、メモっておきます。
タイムアウト時間の設定
Cakephp2.3.xでは、/app/Config/core.php に以下の記述があるので、ここで設定します。
デフォルト状態
1 2 3 |
Configure::write('Session', array( 'defaults' => 'php' )); |
編集後
そこに、このようにタイムアウト時間を設定。
1 2 3 4 |
Configure::write('Session', array( 'defaults' => 'php', 'timeout' => 1440, // 単位は「分」 )); |
よく、1日を秒で指定する場合は「60*60*24」で 86400 を指定するのですが、なぜかここの数値の単位は「分」。「60*24」の、1440 で1日となります。
86400分はそのまんま60日なので、先に書いたような状態となっておりました。
ブラウザを閉じた時にセッションを破棄させたいとき
ではついでなので、ブラウザを閉じた時に、セッションを破棄させる方法。
/app/Config/core.php
1 2 3 4 5 6 7 8 9 10 |
Configure::write('Session', array( 'defaults' => 'php', 'timeout' => 1440, // 単位:分 'ini' => array( 'session.cookie_lifetime' => 0, // 単位:秒 ブラウザを閉じた時にセッションを破棄 'session.gc_maxlifetime' => 2580000, // 単位:秒 操作なし時、sessionを削除するまでの時間 'session.gc_probability' => 1, // ガページコレクション(GC)を起動する確率分子 'session.gc_divisor' => 100, // ガページコレクション(GC)を起動する確率分母 ) )); |
ガベージコレクション(GC)とは、プログラムが確保した Session のうち、不要になった Session を自動的に解放する機能。
上記の例では、1/100 の確率で、要らなくなったセッションを削除してくれる、という感じらしいです。
詳しくはコチラとか。
Webプログラマ勉強中: CakePHPセッションについて
PHPプロ!TIPS+|セッションのガーベッジコレクションをテストする
それにしてもCakePHPは奥深いなぁ。
[tgAmazonItemLookup asin="4800001927" related="1"]