[CodeIgniter] セッションをプレフィックス付きDBで使う場合の設定
CodeIgniterをプレフィックス付きDBで運用している際に、セッションDBの設定方法が微妙にわかりずらかったのでまとめました。
更新日: 2018.7.17公開日: 2017.9.13
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はシンプルで自由に使えるフレームワークですが、ところどころ設定にハマりどころがあります。普段から使ってる人間でも忘れてしまうことがあるので、メモを残すなり、オレオレ設定ファイルで一括管理するなり、工夫すると良さそうです。