【Laravel】セッションとクッキーの使い方|ログイン状態や通知機能に活用する方法

【Laravel】セッションとクッキーの使い方|ログイン状態や通知機能に活用する方法 Laravel

Laravelでは、セッションとクッキーを使ってユーザーの状態管理や一時的なデータの保存が簡単に実現できます。この記事では、セッションとクッキーの基本的な使い方から、ログイン状態の保持やフラッシュメッセージなど実務でよく使われる用途までを解説します。

セッションとは?

セッションは、ユーザーごとに一時的なデータを保存するための仕組みです。例えばログイン状態の保持や、フォーム送信後の一時メッセージ表示などに使われます。Laravelでは、セッションはデフォルトでfileドライバを使い、storage/framework/sessionsディレクトリに保存されます。

セッションに値を保存する

session(['user_id' => 123]);

もしくは、以下のように書くことも可能です。

Session::put('user_id', 123);

セッションから値を取得する

$userId = session('user_id');

または

$userId = Session::get('user_id');

セッションの値を削除する

Session::forget('user_id');

セッション全体を破棄するには以下を使用します。

Session::flush();

クッキーとは?

クッキーは、ユーザーのブラウザに小さなデータを保存しておく仕組みです。セッションと違い、ブラウザを閉じた後も一定期間保持される点が特徴です。ユーザーの設定情報やトラッキングに使われることが多いです。

クッキーに値を保存する

return response('Cookie Set')->cookie('user_name', 'John', 60);

この例では、user_nameという名前のクッキーにJohnという値を60分間保存します。

クッキーから値を取得する

$userName = request()->cookie('user_name');

ログイン状態の保持に活用する

Laravelの認証システム(Authファサード)では、ログイン後にセッションにユーザーIDが保存され、以降のリクエストで自動的に認証状態が保持されます。ログインセッションはユーザーがログアウトするか、セッションが無効になるまで持続します。

「ログインしたままにする」機能を実現するには、クッキーを併用することで、セッションが切れても再認証可能な仕組みを作ることもできます。

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

フラッシュメッセージは、一度のリクエストでのみ有効なセッションデータです。フォーム送信後の完了メッセージやエラー通知に使われます。

フラッシュメッセージを設定する

Session::flash('message', '登録が完了しました。');

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

@if (Session::has('message'))
    <div class="alert alert-success">
        {{ Session::get('message') }}
    </div>
@endif

セッションとクッキーの使い分け

用途 セッション クッキー
ログイン状態の保持 △(Remember Meなどで併用)
一時メッセージの表示 ×
長期間の情報保存 ×
セキュリティの高さ 高い 通常

セッションやクッキーのセキュリティ対策

LaravelはCSRFトークンや暗号化などのセキュリティ対策が標準で備わっていますが、以下の点にも注意が必要です。

  • セッションハイジャック対策のため、HTTPS通信を利用する
  • クッキーには重要な情報を保存しない
  • HttpOnlyやSecure属性を適切に設定する

まとめ

Laravelのセッションとクッキーは、ログイン状態の管理やユーザーへの通知に欠かせない存在です。場面に応じて適切に使い分けることで、より快適で安全なアプリケーションを実現できます。セッションは短期的なデータの保持、クッキーは長期的な設定情報の保持に向いています。Laravelの提供するAPIを活用して、効率的な状態管理を実装してみましょう。