セッションの有効時間変更

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

バージョンが上がったら、処理内容が追加されてないか、確認した方が良さそうです。念のため