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