ステートレスなHTTP通信をステートフルな通信にするためのセッション管理ですが、Laravelでは簡単にセッション管理をするための仕組みが用意されています。
この記事で、Laravelでセッション管理する方法を解説していきたいと思います。
セッション管理
Laravelのセッション管理についてはconfig/session.phpで下記のように定義されています。
<?php
use Illuminate\Support\Str;
return [
'driver' => env('SESSION_DRIVER', 'file'),
'lifetime' => env('SESSION_LIFETIME', 120),
'expire_on_close' => false,
'encrypt' => false,
'files' => storage_path('framework/sessions'),
'connection' => env('SESSION_CONNECTION', null),
'table' => 'sessions',
'store' => env('SESSION_STORE', null),
'lottery' => [2, 100],
'cookie' => env(
'SESSION_COOKIE',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
'path' => '/',
'domain' => env('SESSION_DOMAIN', null),
'secure' => env('SESSION_SECURE_COOKIE'),
'http_only' => true,
'same_site' => 'lax',
];
セッションドライバ
Laravelではfile,database,memcached,redisなどでセッションを管理することができる仕組みが用意されています。
config/session.phpでdriverキーが定義されています。
'driver' => env('SESSION_DRIVER', 'file'),
デフォルトではfileが設定されており、セッションファイルの保存先はfilesキーで定義されており、後ほど説明します。
また、.envファイルでSESSION_DRIVERキーでセッションドライバの設定を行うことができます。
SESSION_DRIVER=database
セッションの有効期限
セッションの有効期限はconfig/session.phpでlifetimeキーで定義されています。
'lifetime' => env('SESSION_LIFETIME', 120),
単位は分でデフォルトでは120分なので、セッションの有効期限は2時間です。
セッションファイル保存先
セッションドライバがファイルの場合の、セッションファイルの保存先を設定することができます。
filesキーで定義されており、デフォルトではstorages/framework/sessionsディレクトリ内に保存されます。
'files' => storage_path('framework/sessions'),
cookieのキー名
暗号化されたセッションIDをクッキーで保存する際のcookieのキー名を設定することができます。
config/session.phpでcookieキーで定義されています。
'cookie' => env(
'SESSION_COOKIE',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
デフォルトではlaravel_sessionというcookieキー名で暗号化されたセッションIDが保存されます。
セッション操作
Laravelでセッションを操作するには3つの方法があります。
Requestインスタンス、sessionヘルパ、Sessionファサードの3つの方法です。
この記事ではRequestインスタンスを使ったセッション操作の方法を紹介しますが、どの方法でも基本的なセッション操作の方法に大差はありません。
セッション保存
putメソッドを使うことでセッションを保存することができます。
第1引数にはセッションキー、第2引数にはその値を指定します。
$request->session()->put('test', 'セッションテスト');
フラッシュデータを保存するにはflashメソッドを使用します。
$request->session()->flash('flash_test', 'フラッシュデータのセッションテスト');
フラッシュデータとは直後のリクエストの間でのみ有効になるセッションデータのことです。
それ以降のリクエストでは削除されるので一時的に表示したいメッセージや値がある場合に使用されます。
セッション再生成
有効期限が切れたりしたセッションIDを再生成したい場面が出てきます。
その場合はregenerateメソッドを実行することでセッションIDを再生成することができます。
$request->session()->regenerate();
セッション取得
保存したセッションを取得する場合にはgetメソッドを使用します。
引数にセッションキーを指定することでそのキーの値を取得することができます。
$request->session()->get('test');
また、保存されているセッションの全データを取得するにはallメソッドを使用します。
$request->session()->all();
その他にはpullメソッドを使用することでセッションデータを取得後にそのデータを削除することができます。
$request->session()->pull('test');
セッション削除
保存されているセッションデータを削除するにはforgetメソッドを使用します。
第1引数には削除したいセッションのキーを指定します。
$request->session()->forget('test');
保存されているセッションの全データを削除するには、flushメソッドを使用します。
$request->session()->flush();
セッションの存在確認
該当のセッションキーのデータの存在確認をするにはhasメソッドを使用します。
hasメソッドは引数に指定したキーのセッションデータが存在し、nullでない場合にtrueを戻り値として返します。
$request->session()->has('test');
また、existsメソッドでもセッションの存在確認をすることができます。
existsメソッドは引数に指定したキーのセッションデータの値がnullでも存在するならtrueを戻り値として返します。
$request->session()->exists('test');
デバッグバーを使ったセッションの確認
Laravelではデバッグバーを活用することで現在保存されているセッション一覧を簡単に確認することができます。
「Session」タブをクリックすることでセッション一覧を確認することができます。
Laravelデバッグバーの導入方法は下記の記事で紹介しているので、ぜひ参考にしてください。
まとめ
Laravelでセッション管理する方法について解説してきました。
セッションはWebアプリケーション開発を行う上で、必須の知識と言っても過言ではないでしょう。
LaravelでWebアプリケーション開発を行う場合でも、しっかりとセッションを扱えるようになっておきましょう。