c0d3man52

Webサイト制作

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