0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Day6 — Cookie と Session の仕組みをLaravelの実装例で理解する

Posted at

はじめに

ログイン機能を実装していると、必ず登場するこの2つの単語。

Cookie

Session

でも正直、

・「何が違うの?」

・「どっちがデータを持ってるの?」

・「なぜページ遷移してもログイン状態が保持されるの?」

と、 仕組みが曖昧なまま使っている人がほとんど です。

この記事では、
✅ ブラウザ目線
✅ サーバ目線(Laravel)
✅ 実際に Cookie を発行するミニ実験

を通して、
CookieSession の正体を少しでも理解できるよう解説します。

今日のゴール

・Cookie と Session の役割の違いが説明できる

・なぜログイン状態が維持されるのかが分かる

・Laravel で Cookie を発行・取得できる

・セキュリティ設定(HttpOnly / Secure)が理解できる

まず結論:Cookie と Session の役割はこう違う

項目 Cookie Session
保存場所 ブラウザ サーバ
中身 識別子や設定情報 ユーザーの状態
セキュリティ 低め 高い
主な役割 「鍵」 「本体データ」

Session はサーバにあり、Cookie はその鍵を持っているだけ
これが超重要なポイントです。

ログインの正体を超シンプルに表すと

① ユーザーがログインする
② サーバが Session を作る
③ Session ID を Cookie としてブラウザに保存
④ 次回以降、ブラウザは Cookie を送り続ける
⑤ サーバが「同一ユーザーだ!」と判定できる

つまり、

ログイン状態の正体 = Cookie に保存された Session ID

です。

Cookie とは?

Cookie とは、

ブラウザに保存される小さなデータ

です。

例:

token=abc123

これは

・サイトを閉じても残る

・次のアクセス時に自動で送信される

という特徴があります。

Session とは?

Session は、

 サーバ側で管理される「ユーザーの状態」

です。

例としては:

・ログイン中ユーザーID

・カートの中身

・権限情報

などが Session に保存されます。

Cookie と Session の連携図(超重要)

【ブラウザ】
  Cookie: session_id=xyz
        ↓
【サーバ】
  Session[xyz] = user_id: 10

ブラウザは
「私は誰か?」は一切知らない
ただ session_id を毎回送っているだけ

本体の情報(user_idなど)は
すべてサーバにある

だから Session は安全 なのです。

ミニ実験:Laravel で Cookie を発行してみる

ここからは、
実際に Cookie を発行して、ブラウザに保存される瞬間を確認 します。

ルートを作成(routes/api.php)

Route::get('/set-cookie', function () {
    return response('Cookieセットしました')
           ->cookie('test_cookie', 'hello', 60);
});

これは

test_cookie=hello
有効期限 60 分

の Cookie を発行します。

ブラウザでアクセス

DevTools → Application → Cookies を確認

すると、

test_cookie = hello

が保存されているのが確認できます。

Cookie はレスポンスヘッダーで保存される
これ重要です(Day4と連動)。

Cookie を Laravel 側で受け取る

次は受信です。

Route::get('/get-cookie', function () {
    $cookie = request()->cookie('test_cookie');

    return ['cookie' => $cookie];
});

ブラウザでアクセス:

/api/get-cookie
{"cookie":"hello"}

ブラウザは自動で Cookie を送信している

ここが仕組みの本質です。

セキュリティ超重要設定(実務必須)

Cookie には必ず以下の設定を付けます。

HttpOnly(JSから取得できない)

->cookie('token', 'abc123', 60, null, null, false, true);

✅ XSS 攻撃から守れる
✅ JS から document.cookie で見えない

Secure(HTTPS通信のみ)

->cookie('token', 'abc123', 60, null, null, true, true);

✅ 本番では 必須

「Cookie = 危険」と言われる理由

Cookie 自体が危険なのではなく、

・中に 個人情報を直接入れる

・HttpOnly を付けない

・HTTPS で通信しない

こういう 使い方が危険 なのです。

SPA(React + API)時代の Session の立ち位置

一般的な構成では、

・管理画面 → Cookie + Session

・SPA / モバイル → JWT(Day15で解説)

という使い分けが主流です。

それでも、

Session の概念は JWT を理解するための土台

になります。

今日のまとめ

・Cookie は「ブラウザに保存される鍵」

・Session は「サーバに保存される本体データ」

・ログイン状態の正体は「Session ID を入れた Cookie」

・ブラウザは Cookie を毎回自動送信している

・HttpOnly / Secure 設定は実務必須

・Cookie を理解すると認証全体が一気に見える

次回 Day7 は…

「CORS を図で完全理解:なぜ通信がブロックされるのか?」
React × Laravel で一度は詰まるであろう
「赤い CORS エラー」の正体を徹底解説します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?