Laravelでのセッションについて

概要

アプリケーションのセッション設定ファイルは 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メソッドをルート定義にチェインさせれば良い。

コメント

タイトルとURLをコピーしました