表題の件。
cakephp2でセッションの保存先をDBにする場合。
core.phpでSessionの設定を下記に変更して
Configure::write('Session', array(
//'defaults' => 'php'
'defaults' => 'database',
'cookie' => CAKEPHP',
'timeout' => 3*60, //ソース見た限り分を指定 3時間
));
defaultで設定されているDBに以下のようなテーブルを作成する。
CREATE TABLE IF NOT EXISTS `cake_sessions` (
`id` varchar(255) NOT NULL DEFAULT '',
`data` text NOT NULL,
`expires` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
これでOKなんだけど、諸般の事情でdefaultでないDBにcake_sessionsテーブルを置きたい場合にちょっとはまった。
一応、下記のように保存するモデルを設定することができる。
Configure::write(‘Session’, array(
//’defaults’ => ‘php’
‘defaults’ => ‘database’,
‘cookie’ => CAKEPHP’,
‘timeout’ => 3*60, // 3時間
‘handler’ => array(
‘model’=>’CakeSession’
)
));
変更がなければ(defaultで設定したDBにテーブルを置く場合は),modelにcake_sessionsのファイルはいらないが、変える場合は作成しなければならないようで
model/CakeSession.phpを作成した。が、なぜかダメ。勝手にdefaultのDBに接続しに行っちゃうようです。ライブラリをざっと見てみたけど原因わからず。
結論
モデル名をCakeMySession.phpに、コンフィグレーションも’model’=>’CakeMySession’に変更することでうまくいきました。
デフォルトの名前だと処理がショートカットされているのかな?