Laravel5でデータベースセッションを使う

2017.5.3 (水)

WEBサーバーの冗長化にともなってMemcachedやRedisでセッション管理が人気ですが、ここではDBでセッション管理をする方法です。Laravelはとても簡単に設定できました。(少なくともCakePHP3よりかなり簡単に設定できます。)
もともとartisanにDBのセッション管理のマイグレーションが設定されているので、.envのパラメータを1つ変更してマイグレーションを行うだけです。
Laravelはデフォルトではセッションドライバーはfileでセットされています。セッションを活性化させるとstrage/framework/session/*に各セッションファイルが生成されます。これをDBにインサートして管理します。

.envの設定

セッションドライバーをdatabaseに設定します。

#SESSION_DRIVER=file
↓
SESSION_DRIVER=database

セッションテーブルのマイグレーション

php artisan session:table
php artisan migrate

これだけで完了。

いろいろ調べてみる

設定自体はこれで終わりなんですが、マイグレーション自体のコードはartisanで、yyyy_mm_dd_hhiiss_create_sessions_table.phpに作成されます。sessionsというテーブル名でLaravel4に比べてカラムが結構増えてますね。ユーザー認証関連でのカラムが追加されている感じですかね。

// database/migration/yyyy_mm_dd_hhiiss_create_sessions_table.php
Schema::create('sessions', function (Blueprint $table) {
    $table->string('id')->unique();
    $table->unsignedInteger('user_id')->nullable();
    $table->string('ip_address', 45)->nullable();
    $table->text('user_agent')->nullable();
    $table->text('payload');
    $table->integer('last_activity');
});

また.envに書いたパラメータは、config/session.phpの

'driver' => env('SESSION_DRIVER', 'file'),

の部分に引き継がれているので、公式ドキュメントなどではこの部分の修正ってことになっているかと思います。この部分のパラメータに直接databaseを設定しても同じことになります。MemcachedやRedisの設定方法はまた今度。