【cakePHP】セッションをデータベースで管理

またまたTips的なことを。
cakePHPのセッション(Session)管理は通常PHPで行われているのですが、データベースに保存することによってより可視化できるし、負荷分散などもできるようなのでデータベースに移してみました。

セッション管理をデータベースに移す方法はそんなに難しくありません。
所要時間も15分かからないくらいじゃないかな?
cakePHPのバージョンは2.0.6です。

移行準備

セッション管理をデータベースで行うためにはまず、データベースのテーブル(cake_sessions)を作成します。
cake_sessionsという名前は別になんでもいいらしいのですが、今回はデフォルトでいきます。

SQL文は以下の通り。
これを実行してもいいし、ここに書かれているカラムを作成してもよし。

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=InnoDB DEFAULT CHARSET=utf8;

Configファイルの変更

データベースができたら、Configファイルを変更します。
bootstrap.phpに記述しても良いらしいのですが、個人的に少し気持ち悪いので、
Core.phpに記述しましょう。(というか、僕はしました笑)

/app/Config/Core.php

//Ver2.0.6だと170行目付近
Configure::write('Session', array(
    'defaults' => 'php'));

ここの記述を下記に変更します。

/app/Config/Core.php

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
    )
));

phpからdatabaseに変更されましたよね。
ついでにセッションの保持時間も変更しているのですが、これは秒数で適当な時間を設定してください。
僕はテスト用のサイトでこの設定を使っています。

259200秒は3日ってとこですね。
例えば会員制サイトでログインして、明示的にログアウトしなかったら3日間はログインしっぱなしです。
日常的に使用するソーシャルネットワークサイト(mixiとかfacebook)とかだったらそっちの方が便利ですよね。

変更終了!たったこれだけ。

これでセッションはデータベースに書き込まれます。
試しにセッションに何か書き込んで、データベースを確認してみてください。
なんか、よくわかんない文字列がたくさん書き込まれてるはずです。

とまぁ、ざっくりですが、これで終了です。
簡単ですよね?
cakePHPって簡単なんですよ。

では、また。

この記事を書くにあたってWEBLEさんの
CakePHP で Session の保存先にデータベースを使用する方法
を参考にさせていただきました。

  1. コメント 0

return top