2014年6月22日

【備忘録】Cake PHPのセッションタイムアウトの設定

 Webアプリケーションは、リクエストすればセッションタイムアウトまでの時間が延長されると思っていたのに、今、開発中のやつは、何回かリクエストするとセッションが切れるという現象にあっていたので調べてみた。
 (いや、なにもしないで思った通りになるとは思っていないのですが、ちょっと後回しにしてただけです…。)


やりたいことは、下の2つですが、PHPだとガベージコレクションとの関係で、生きているセッションファイルも消されるようなので注意が必要なようです。


  1. ブラウザを開き直したら、再度ログイン要求があること
  2. ブラウザで送信したらセッションタイムアウトが延長されること


設定変更ファイル

  1. core.php

変更内容

  1. Configure::write('Session', array(
  2.   'defaults' => 'cake',
  3.   "timeout"=>60,                                 // 60分 (muinitues)
  4.   "cookie"=>"MY_COOKIE",
  5.   "autoRegenerate"=>true,
  6.   "ini"=>array(
  7.     "session.cookie_lifetime"=>0,             // ブラウザを閉じたらセッションを破棄
  8.     "session.gc_maxlifetime"=>86400,       // 1日 (seconds) 1days=86400
  9.   ),
  10. ));
重要ポイント


  • 5.クッキーを再作成する為の指定
  • 7.クッキーのライフタイム
    0にすると、ブラウザを閉じるとクッキーが削除されるのでセッションとの関連がなくなる。
  • 8.ガベージコレクションの時間指定。
    php.iniの設定をCakePHPで書き換えます。

ポイント

ライフタイムの関係を↓ようにするようにということでした。
クッキーのライフタイム<セッションタイムアウト時間<ガベージコレクション



コントローラのbeforeFilter関数でも以下のことをしたほうが良いようです。
ただ、時間の関係上、動作確認はしてないので、この記事を読んだ方は試してみてください。

  1. public function beforeFilter() {
  2.   parent::beforeFilter();
  3.   CakeSession::$requestCountdown = 1; // Cookie再作成 タイミング
  4. }

参考にした記事

CakePHPのセッションタイムアウトのしては、Session.timeoutだけではダメだった


これで、セッション時間のコントロールもお手のもの?

0 件のコメント:

コメントを投稿