概要
アプリケーションのセッション設定ファイルは config/session.php に保存されている。
セッションの保存先を選択できる。選択肢はドキュメント参照すると良い。
セッションデータを操作する主な方法は、
sessionヘルパとRequestインスタンスの2つ。
セッションを使う時に、Requestクラスを使っても、sessionヘルパを使っても実践的な違いはほぼ無い。
Illuminate\Http\Request クラスのリファレンスは、https://laravel.com/api/10.x/Illuminate/Http/Request.html
セッションドライバがdatabaseの場合
last_activityに日時が保存される
unixタイムスタンプで保存されるので、確認するには次のコマンドを実行すると良い。
(Linuxのシェルで)
$ date -d @last_activityの文字列
payloadにセッション情報が保存される
payloadはbase64でエンコードされた文字列が入っているので、
内容を確認したければ次のコマンドを実行すると良い。
(Tinkerなどで)
> base64_decode('payloadの文字列');
Requestインスタンスから操作する場合の書式
keyがあれば値を取得し、keyが存在しなかった場合、defaultを取得する。
default部分にクロージャを渡すこともできる。
$request -> session() -> get('key', 'default');
// 既存のキーに新しい値を追加(値が配列になる)
$request -> session() -> push('key', 'value');
// 既存のキーから値を取得し、キーと値のセットを削除する。
$value = $request -> session() -> pull('key', 'default');
// フォームの入力やり直しなどで使える。
$request -> session() -> flash('key', 'value');
// flashメソッドを使用してセッションに保存されたデータは、
// 即時および後続のHTTPリクエスト中に利用可能。
// 後続のHTTPリクエストの後、一時保存したデータを削除する。
// 複数のリクエストの間、
// 一時保存データを保持する必要がある場合。
$request -> session() -> reflash();
// reflashメソッドとは違い、特定のデータのみを保持する場合。
$request -> session() -> keep(['key', 'value']);
// 一時保存データを現在のリクエストに対してのみ保持する場合。
$request -> session() -> now('key', 'value');
// 1つのキーを削除。
$requst -> session() -> forget('key);
// 複数のキーを削除。
$request -> session() -> forget(['key1', 'key2']);
// 全てのデータを削除。
$request -> session() -> flush();
// セッションIDの再生成。(セッション固定攻撃対策)
$request -> session() -> regenerate();
// セッションIDを再生成して、全てのデータを削除。
$request -> session() -> invalidate();
覚え書き
hasメソッドを利用すると、キーが存在し、値がnullでない場合にtrueを返す。
existsメソッドを利用すると、キーが存在すればtrueを返す。
missingメソッドを利用すると、キーが存在しない場合にtrueを返す。
sessionヘルパを利用して操作する場合の書式
// セッションからデータ取得。
$value = session('key');
// セッションからデータ取得時に、
// keyが存在しなかった場合のデフォルト値を設定。
$value = session('key', 'default');
// セッションにデータを保存。
session(['key' => 'value']);
セッションブロッキング
特定のセッションの同時リクエストを制限できる。
使うには、セッションブロッキングの必要条件を確認したうえで、
blockメソッドをルート定義にチェインさせれば良い。