タイトル: セッション情報の確認
SEOタイトル: Laravel セッション・ログインユーザ情報の確認方法|Auth::user / session() / dump
この本文には実行可能なタグ等が含まれるため、安全のためHTMLソースとして表示しています。本文データは変更していません。
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse;background:#fffbea;border:1px solid #f4c430;margin:1em 0;width:100%"><tr><td style="background:#f4c430;color:#000;font-weight:bold;padding:8px">この記事の要点</td></tr><tr><td style="padding:10px"><ul><li>Laravel で<strong>ログイン後のセッション情報・ユーザ情報</strong>を確認する</li><li><strong>全情報</strong>: <code>Auth::user()</code> / <strong>ID のみ</strong>: <code>Auth::id()</code></li><li>セッション全件: <code>session()->all()</code> / 個別: <code>session("key")</code></li><li>デバッグ: <code>dd(session()->all())</code> / ログ出力: <code>Log::info(json_encode($user))</code></li><li>Blade テンプレート: <code>{{ auth()->user()->name }}</code> / <code>@auth ... @endauth</code></li></ul></td></tr></table>
<h2>ログインユーザの取得</h2>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-php">use Illuminate\Support\Facades\Auth;
// User オブジェクト全体
$user = Auth::user();
// または
$user = auth()->user();
// ID のみ
$userId = Auth::id();
// ログイン中かどうか
if (Auth::check()) {
// ログイン済み
}
// User オブジェクトの各属性
echo $user->id;
echo $user->name;
echo $user->email;
echo $user->created_at;</code></pre>
<h2>セッション情報の取得</h2>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-php">// グローバルヘルパ session()
$value = session('key');
$value = session('key', 'default'); // デフォルト値
// 全件取得
$all = session()->all();
// 存在チェック
if (session()->has('key')) { ... }
// Request 経由でも取得可
public function show(Request $request) {
$value = $request->session()->get('key');
}
// セッションに保存
session(['foo' => 'bar']);
session()->put('foo', 'bar');
// 削除
session()->forget('foo');
session()->flush(); // 全消去
// 一回限り(次のリクエストまで保持)
session()->flash('message', '保存しました');</code></pre>
<h2>デバッグ表示</h2>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-php">// 即時 dump して停止(dump + die)
dd(Auth::user());
dd(session()->all());
// dump して継続
dump(session()->all());
// var_dump 風
\Log::info('User info', [
'user' => Auth::user(),
'session' => session()->all(),
]);
// JSON でログ
\Log::debug(json_encode(Auth::user()->toArray(), JSON_UNESCAPED_UNICODE));</code></pre>
<h2>Blade テンプレートでの表示</h2>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-blade">{{-- ログイン中だけ表示 --}}
@auth
こんにちは、{{ auth()->user()->name }} さん
<form method="POST" action="{{ route('logout') }}">
@csrf
<button>ログアウト</button>
</form>
@endauth
{{-- 未ログイン時だけ表示 --}}
@guest
<a href="{{ route('login') }}">ログイン</a>
@endguest
{{-- ロール別表示 --}}
@can('admin')
管理者メニュー
@endcan
{{-- セッションフラッシュメッセージ --}}
@if(session()->has('message'))
<div class="alert">{{ session('message') }}</div>
@endif</code></pre>
<h2>セッションの保存先</h2>
<p>Laravel は <code>.env</code> の <code>SESSION_DRIVER</code> でセッションの保存先を切替:</p>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse;width:100%">
<thead><tr style="background:#f3f4f6"><th>ドライバ</th><th>保存先</th><th>用途</th></tr></thead>
<tbody>
<tr><td><strong>file</strong> (デフォルト)</td><td><code>storage/framework/sessions/</code></td><td>単一サーバ・開発時</td></tr>
<tr><td><strong>cookie</strong></td><td>ブラウザ Cookie(暗号化)</td><td>サーバレス・軽量</td></tr>
<tr><td><strong>database</strong></td><td>sessions テーブル</td><td>複数サーバ環境</td></tr>
<tr><td><strong>redis</strong></td><td>Redis</td><td>高速・複数サーバ・大規模</td></tr>
<tr><td><strong>memcached</strong></td><td>Memcached</td><td>高速・分散</td></tr>
<tr><td><strong>array</strong></td><td>メモリ(リクエスト終了で消える)</td><td>テスト時のみ</td></tr>
</tbody>
</table>
<h2>セッション ID とライフタイム</h2>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-php">// セッション ID
$id = session()->getId();
// セッション regenerate(ログイン時の典型)
session()->regenerate();
// 無効化
session()->invalidate();
// すべてクリア + 新規 ID
Auth::logout();
session()->invalidate();
session()->regenerateToken();
// config/session.php の lifetime(分)
// .env: SESSION_LIFETIME=120 で 2 時間</code></pre>
<h2>API トークン認証の場合</h2>
<p>API ルートはセッションを使わないため、Sanctum / Passport で発行したトークンが使われます:</p>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-php">// Sanctum で認証されたユーザ
Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
return $request->user();
});
// クライアント側
fetch('/api/user', {
headers: {
'Authorization': 'Bearer ' + token
}
});</code></pre>
<h2>Telescope でセッション確認(開発時)</h2>
<pre style="background:#1e293b;color:#e2e8f0;padding:1em;border-radius:6px;overflow-x:auto;line-height:1.5"><code class="language-bash"># Laravel Telescope を入れる
composer require laravel/telescope --dev
php artisan telescope:install
php artisan migrate
# /telescope にアクセスして
# Requests → 各リクエスト → Session タブで全情報を可視化</code></pre>
<h2>よくあるハマりどころ</h2>
<ul>
<li><strong>Auth::user() が null</strong>: ルートが auth ミドルウェアの内側にない / セッション切れ / Cookie ドメイン違い</li>
<li><strong>セッションが共有されない</strong>: 複数サーバ環境で file ドライバを使っている → database / redis に変更</li>
<li><strong>セッション CSRF</strong>: 「419 Page Expired」は CSRF トークン不一致 → @csrf or X-CSRF-TOKEN ヘッダ</li>
<li><strong>ログ出力でクラスシリアライズ失敗</strong>: 循環参照を避けるため <code>$user->toArray()</code> または select で必要列のみに</li>
<li><strong>session() ヘルパが nil</strong>: コンソールコマンド (php artisan tinker / scheduled job) ではセッション未使用</li>
</ul>