CakePHP で Session の保存先にデータベースを使用する方法

CakePHP 2.1 では (それ以前でも) Session の保存先に php と cake と database を設定できるようになっています。php は通常通り、cake はおそらく CakePHP のどこかに保存をしてくれる、database はデータベースの Session 用のテーブルに Session を保存してくれる機能です。

Session をデータベースに保存する設定

データベースで Session を管理する場合は以下のように Session.defaults に database を設定します。その他の設定は分かりやすくするために一緒に掲載しています。ちなみにこの記述は bootstrap.php などに書いて下さい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Configure::write('Security', array(
    'level' => 'high',
    'salt' => 'qwertyuiopasdfghjklzxcvbnm',
    'cipherSeed' => '12345678900987654321'
));
Configure::write('Session', array(
    'defaults' => 'database',
    'cookie' => 'SID',
    'timeout' => 259200,
    'ini' => Array(
        'session.cookie_lifetime' => 2580000,
        'session.gc_maxlifetime' => 2580000,
        'session.gc_probability' => 1,
        'session.gc_divisor' => 100
    )
));

Session 用のテーブルを作成する

以下の SQL を発行すればテーブルを作成することができます。もちろん手動で作成して頂いても構いません。テーブル名は cake_sessions とします。一応テーブル名を変更することができますが、私の CakePHP 2.1 の環境だと変え方がいまいち分からなかったので変更しないで進めることにしました。

1
2
3
4
5
6
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;

これでデータベースで Session が使えるようになります。データベースで使うと、負荷分散で複数のサーバーで運用している場合などでも Session を保持できたりするし、様々な面でセキュアなんじゃないかと素人ながら感じています。実際どうなのかについてはこれから調べて行きます。今回は以下のページが参考になりました。

コメント

  1. 【cakePHP】セッションをデータベースで管理 | カニとモモンガと愉快なユウさんのコメント

    [...] CakePHP で Session の保存先にデータベースを使用する方法 [...]