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

DSC00174

2013年12月10日(火)

よし。始めよう。

これから先、CakePHPを盛りだくさんでいこうと思う。

小さな小さなTipsを継続的に。

 

さて、表題にもある通り、CakePHPでSessionの保存先をデータベースに変更するということなのだけど、こうすることによって具体的にどうなるかもレクチャーしながら説明します。

 

変更点としてはかなり微々たるものなんだけど、まぁ意味を理解しようねってことです。

 

なぜデータベースなの?

さぁ、これですね。なんでだと思いますかね?

普通に使用する分にはCookieに保存されていると思いますが、なぜわざわざDBに保存するのか。

それはね。通常使用する場合は特に意識しなくても良いのですが、複数WEBサーバを使用する場合に考えなければいけないのです。

ここで複数WEBサーバを使用してない方は、離脱してもいいよ。

 

なぜか。それはCookieというのは該当サーバにデータを保存する形なのです。

というのも、複数サーバを使用する場合はサーバ間でCookieを持ちまわる事ができませんので、場合によってはSession切れを起こしてしまうのです。

そこでDBセッションをしようすると、どのサーバであってもDBを参照してSessionを確認しにいくので、サーバ間でもSessionを維持できる仕組みとなっているのです。

それをCakePHPはちょこっと書き換えるだけで実装してくれるので大変たすかる設定なのです。

理由がわかると簡単ですね。

 

実際にどういうことするの?

これだけ。

	Configure::write('Session', array(
		//'defaults' => 'php'
		'defaults' => 'database',
		'cookie' => 'SID',		// cookie名指定デフォルトはCAKEPHP
		'timeout' => 24*60*60		// 1日間
	));



デフォルト設定では、

'defaults' => 'php'

となっているので、それを

'defaults' => 'database'

へ、変更するんです。
簡単ですね。

そう、CakePHPならね。

 

もちろんこれだけでは足りないです。

だって、テーブル作ってないじゃん。

CakePHPはテーブル構成もきめられているので、本サイトからコピペするだけだよ。

簡単だね。

 

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;

そう、CakePHPならね。

 

まとめ

この設定を変更する場合は、まず自分が構築する環境のWEBサーバの構成を理解したうえで構想していきましょう。

複数台ではない場合は別にこの作業は必要ないですから。

無駄な作業はやめたいですよね?構築するサービス規模を理解し、将来設計も見越した設計をしていきましょう。

次回もCakePHPで逝きまーーーーーーーーーーす。

 

参考
http://weble.org/2012/03/22/cakephp-session-database
http://blog.zolesystem.info/%E3%80%90cakephp%E3%80%91%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A7%E7%AE%A1%E7%90%86/

スポンサードリンク

運営サービスPR

スポンサードリンク

運営サービスPR