この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: セッションの値の取得/保存/更新/削除
SEOタイトル: 【Laravel】セッションの値の取得/保存/更新/削除

この記事の要点
  • Laravel でのセッション操作: session() ヘルパ or $request->session()
  • 取得: session('key') / session()->get('key', default)
  • 保存/更新: session(['key' => value]) / session()->put('key', value)
  • 削除: session()->forget('key') / session()->flush() (全クリア)
  • Flash: session()->flash('key', value) (次リクエストのみ)

 

セッションへの保存・取得

// 保存
session(['user_id' => 123, 'role' => 'admin']);
session()->put('user_id', 123);
$request->session()->put('cart', $cartItems);

// 取得
$userId = session('user_id');
$role = session()->get('role', 'guest');  // デフォルト値付き
$userId = $request->session()->get('user_id');

// 存在チェック
if (session()->has('user_id')) { ... }
if (session()->exists('user_id')) { ... }  // null でも true

// 全データ取得
$all = session()->all();
$all = $request->session()->all();

更新

// 既存セッション値を更新 (put で上書き)
session(['cart' => $newCartItems]);

// 取り出して更新 (配列やオブジェクト)
$cart = session()->get('cart', []);
$cart[] = $newItem;
session(['cart' => $cart]);

// push (配列に追加)
session()->push('cart', $newItem);
session()->push('tags', 'newtag');  // tags は配列

// 増加 (カウンタ用)
session()->increment('count');
session()->increment('count', 5);  // +5
session()->decrement('count');

削除

// 特定キーを削除
session()->forget('user_id');
session()->forget(['user_id', 'role']);  // 複数

// 全削除
session()->flush();

// 値取得 + 削除
$value = session()->pull('key', 'default');
// → 取得して同時に削除

// セッション ID 再生成 (ログイン時等のセキュリティ)
session()->regenerate();
session()->regenerateToken();  // CSRF トークンのみ

Flash データ (次リクエストのみ)

// 次のリクエストでのみ取得可
session()->flash('success', '保存しました');

// または
$request->session()->flash('message', 'OK');

// 次のリクエストで取得
session('success');  // → "保存しました"
// その次のリクエストでは null

// flash を再度残す
session()->reflash();           // 全 flash
session()->keep(['success']);  // 特定キーだけ

// リダイレクトで一緒に
return redirect('/users')->with('success', '登録完了');

Blade での Flash 表示


@if (session('success'))
    
{{ session('success') }}
@endif @if (session('error'))
{{ session('error') }}
@endif @error('email') {{ $message }} @enderror @if ($errors->any())
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif

セッションドライバ

# config/session.php または .env で指定
SESSION_DRIVER=file        # storage/framework/sessions/ にファイル
SESSION_DRIVER=cookie      # Cookie 直接 (容量制限あり)
SESSION_DRIVER=database    # DB (sessions テーブル)
SESSION_DRIVER=redis       # Redis (高速・分散環境)
SESSION_DRIVER=memcached   # Memcached
SESSION_DRIVER=array       # メモリ (テスト用)

# DB ドライバの場合 sessions テーブル作成
$ php artisan session:table
$ php artisan migrate

セッション有効期限

# config/session.php または .env
SESSION_LIFETIME=120       # 分単位 (デフォルト 2 時間)
SESSION_EXPIRE_ON_CLOSE=false  # true: ブラウザ閉じたらクリア

# Cookie の設定
SESSION_DOMAIN=null         # 共有ドメイン
SESSION_SECURE_COOKIE=true  # HTTPS のみ
SESSION_HTTP_ONLY=true       # JS からアクセス不可
SESSION_SAME_SITE=lax       # CSRF 防御 (strict / lax / none)

セキュリティのベストプラクティス

① ログイン時にセッション ID 再生成

public function login(Request $request)
{
    $credentials = $request->only('email', 'password');

    if (Auth::attempt($credentials)) {
        $request->session()->regenerate();  // セッションフィクセーション対策
        return redirect()->intended('/dashboard');
    }

    return back()->withErrors(['email' => '認証失敗']);
}

② 機密情報を保存しない

// ❌ ダメ
session(['password' => $password]);
session(['credit_card' => $cc]);
session(['token' => $apiToken]);

// ✅ 良い: 一時的な参照だけ
session(['user_id' => $user->id]);  // → DB から都度取得
session(['cart_id' => $cart->id]);

③ Cookie 暗号化 (デフォルト)

// app/Http/Middleware/EncryptCookies.php
class EncryptCookies extends Middleware {
    protected $except = [
        // 暗号化しない Cookie
    ];
}

// セッションクッキー (laravel_session) は自動で暗号化

セッションのデバッグ

// 全セッション値を確認
dd(session()->all());
Log::info('Session', session()->all());

// 特定キー
dd(session('user_id'));

// Tinker
$ php artisan tinker
>>> session()->all()
>>> session(['test' => 'value'])
>>> session('test')

// セッションファイル直接確認 (file ドライバ)
$ ls -la storage/framework/sessions/
$ cat storage/framework/sessions/abc123...

API では Session 不要

// REST API は通常ステートレス → セッション不使用
// 代わりに JWT / Sanctum で認証

// API ルートはデフォルトでセッションミドルウェアなし
// (routes/api.php は web ミドルウェアグループ外)

// Sanctum SPA 認証では cookie 経由のセッション利用

関連記事