Skip to main content

セッションとは

HTTPはステートレスなプロトコルです。つまり、リクエストをまたいでユーザーの情報を保持する仕組みがHTTP自体にはありません。 Laravelのセッション機能は、複数のリクエストにわたってユーザーのデータを保持する手段を提供します。 ログイン状態、カート内の商品、フォーム入力中のデータなど、リクエストをまたいで保持したい情報をセッションに保存します。

セッションドライバの設定

セッションの設定は config/session.php に記述されています。 SESSION_DRIVER 環境変数(.env ファイル)でドライバを切り替えられます。
Laravelが標準でサポートするドライバは以下のとおりです。
Laravelのデフォルトプロジェクトでは database ドライバが設定されています。database ドライバを使う場合は sessions テーブルが必要ですが、デフォルトのマイグレーションに含まれているのでそのまま使えます。

セッションへのアクセス方法

セッションにアクセスするには、Request インスタンスのメソッドを使う方法と、グローバルヘルパー session() を使う方法の2つがあります。

Requestインスタンスを使う方法

コントローラーのメソッドに Request をタイプヒントとして受け取り、$request->session() でセッションにアクセスします。

グローバルヘルパー session() を使う方法

session() ヘルパー関数はコントローラーやビューなど、どこからでも呼び出せます。
どちらの方法でもテスト時に assertSessionHas メソッドで検証できます。コントローラー内では $request->session() を使うと依存関係が明示されてわかりやすくなります。

セッションの操作

データの取得

データの存在チェック

hasexists の違いに注意してください。

データの保存

データの削除

フラッシュデータ

フラッシュデータは次のリクエストだけ有効なセッションデータです。 フォームの送信完了メッセージやエラーメッセージなど、一度だけ表示したい情報に使います。

flash() でデータを保存する

このデータは次のリクエストで参照できますが、その後は自動的に削除されます。

フラッシュデータを延長する

Bladeでフラッシュメッセージを表示する

フラッシュメッセージの表示はレイアウトファイル(layouts/app.blade.php など)に書いておくと、すべてのページで一貫して表示されます。

実用例:フォーム送信後のメッセージ表示

フォームを送信したあと、成功メッセージをセッションに保存してリダイレクトし、次のページで表示するのはWebアプリの定番パターンです。
1

ルートの定義

2

コントローラーの実装

フォーム送信を受け付ける store メソッドで、保存後に成功メッセージを付けてリダイレクトします。
redirect()->with('success', '...') はリダイレクト先へフラッシュデータを渡すショートカットです。
3

レイアウトでメッセージを表示する

resources/views/layouts/app.blade.php にフラッシュメッセージの表示部分を追加します。
4

一覧ページのビューを作成する

投稿が保存されてリダイレクトされると、この一覧ページの上部に「投稿を作成しました。」というメッセージが1回だけ表示されます。

バリデーションエラーと組み合わせたパターン

バリデーション失敗時は back()->withErrors() と組み合わせて使います。 Laravelはバリデーション失敗時に自動でエラーをフラッシュデータとして保持するため、Bladeで $errors 変数を使えます。
flush() はセッションのすべてのデータを削除します。ログイン状態なども失われるため、ユーザーのデータだけを削除したい場合は forget() で特定のキーを指定してください。

次のステップ

バリデーション

フォームの入力データをバリデーションで検証する方法を確認します。
最終更新日 2026年3月29日