セッションの有効時間変更
CakePHPで、Security.levelをmediumにするとセッションの有効時間が自動的に7日間になるところをカスタマイズする方法の再実装。
以前、app側で変える方法がわからなくてcake/libs/session.phpを改修してましたが、
方法を教えていただいたので、ようやく対応しました ^^;
方法
http://d.hatena.ne.jp/hetima/20070116/1168883397
要約すると、
- core.phpでSession.saveの設定を「独自設定使用」にする
- app/config以下に、独自設定用のコードを置く
の2点。
私の場合、セッションをDB保管が前提なので、独自設定コードは以下のようになってます。
<?php /* Database保管前提 */ /* セッション期限:ブラウザを閉じるまで */ if (empty($_SESSION)) { if (Configure::read('Session.table') === null) { trigger_error(__("You must set the all Configure::write('Session.*') in core.php to use database storage"), E_USER_WARNING); exit(); } elseif (Configure::read('Session.database') === null) { Configure::write('Session.database', 'default'); } if ($iniSet) { ini_set('session.use_trans_sid', 0); ini_set('url_rewriter.tags', ''); ini_set('session.save_handler', 'user'); ini_set('session.serialize_handler', 'php'); ini_set('session.use_cookies', 1); ini_set('session.name', Configure::read('Session.cookie')); ini_set('session.cookie_lifetime', 0); // cake/lib/session.phpから変更 ini_set('session.cookie_path', $this->path); ini_set('session.auto_start', 0); } } session_set_save_handler(array('CakeSession','__open'), array('CakeSession', '__close'), array('CakeSession', '__read'), array('CakeSession', '__write'), array('CakeSession', '__destroy'), array('CakeSession', '__gc') );
これは、cake/lib/session.phpの443行目以下、
switch (Configure::read('Session.save')) { case 'cake':
この中のベースにする設定用の処理内容をコピーしてきて、必要な部分だけ書き換えでOK
バージョンが上がったら、処理内容が追加されてないか、確認した方が良さそうです。念のため