[CodeIgniter] セッションをプレフィックス付きDBで使う場合の設定

CodeIgniterをプレフィックス付きDBで運用している際に、セッションDBの設定方法が微妙にわかりずらかったのでまとめました。

CodeIgniterのセッション管理

CodeIgniter2までは、クッキードライバで管理するのが定番でしたが、CodeIgniter3からはセキュリティ面を考慮してクッキーの利用を廃止しています。(使えなくはないんですが)

CodeIgniter3では、下記の4つの方法でセッションを管理できます。

  • ファイル
  • データベース
  • redis
  • memcached

ファイルベースは遅いので、データベースかmemcachedが選ばれると思いますが、今回はデータベースを使用します。

データベース設定

まずは、CodeIgniterでデータベースのプレフィックス設定をします。すでに設定している人は読み飛ばしてください。

Codeigniterのデータベース設定はapplication/config/database.phpに書き込みます。環境によってはconfig/developmentやconfig/productionというディレクトリに入れることもあると思いますが、いずれにしてもdatabase.phpにプレフィックスを設定します。

$db['default'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'user',
	'password' => 'pass',
	'database' => 'fugadb',
	'dbdriver' => 'mysqli',
	'dbprefix' => 'hoge_', //ここにプレフィックスを記載する
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

これで、このCodeigniterアプリでは、すべて「hoge_xxxxx」というデータベースを読み込みます。

config.phpでセッション周りの設定をする

実は、セッションをDBで管理する場合はこれだけではprefixが効かなくて、「ci_sessionテーブルがないよ」というエラーに遭遇します。

セッションは別に設定管理されていて、config.phpの「$config[‘sess_save_path’]」がそれに当たります。

$config['sess_save_path'] = 'hoge_ci_session'; //ここを変える

これで無事セッションの管理もプレフィックしたテーブルに登録されるようになりました。


CodeIgniterはシンプルで自由に使えるフレームワークですが、ところどころ設定にハマりどころがあります。普段から使ってる人間でも忘れてしまうことがあるので、メモを残すなり、オレオレ設定ファイルで一括管理するなり、工夫すると良さそうです。