CodeIgniterでセッション管理にSQlite3を使ってみる

CodeIgniter(PHP開発)

久しぶりにちょっと開発。

データがとても小さいのでSQLiteを使おうと思った。
開発はMac上。

PHPにSQLiteのドライバーはバンドルされているようです。
DBのメンテナンスツールにはなんといってもDB Browser for SQLiteがオススメですね。

さて、CodeIgniterでログオンログオフなどの管理をしようとすると、sessionを使うのが必須といえるでしょう。
CodeIgniterのセッション管理は独自のものだったと記憶しています。

SQLiteをセッション管理ファイルとして使うなら、こうします。

  1. DB Browserで次のようにテーブルを定義します。(ここではデータベースファイルをdb.sqlite3としています)
    CREATE TABLE "ci_sessions" (
    	"id"	TEXT,
    	"ip_address"	TEXT,
    	"timestamp"	INTEGER,
    	"data"	BLOB,
    	PRIMARY KEY("id")
    )
    CREATE INDEX "ci_sessions_timestamp" ON "ci_sessions" (
    	"timestamp"
    )
    
  2. application->config->database.php内で、
    databaseにSQliteで作ったデータベースファイル(./db.sqlite3)を定義します。
    dbdriverにsqlite3を指定します。
  3. application->config->config.phpのセッション管理をこうします。
    $config['sess_driver'] = 'database';
    $config['sess_cookie_name'] = 'ci_session';
    $config['sess_expiration'] = 7200;
    $config['sess_save_path'] = 'ci_sessions';
    $config['sess_match_ip'] = FALSE;
    $config['sess_time_to_update'] = 300;
    $config['sess_regenerate_destroy'] = FALSE;
    
    
  4. application->config->autoload.php内にこうします。
    $autoload['libraries'] = array('session');
    
  5. このまま実行すると、おそらくDatabaseがRead Onlyのエラーになると思います。(Macの場合)、phpスクリプトとデータベースファイルが格納されていたディレクトリの書き込み権限を777にとりあえずします。だって自分しか使わないでしょ?

Welcomeクラスでいいので、起動してみてなんのエラーも出ないことを確認します。エラーが出ないということはsessionクラスは動いています。

コメント