2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cookieとは?Webがあなたを覚えている仕組み

Last updated at Posted at 2025-11-10

1. Cookieとは?

Cookieとは、サーバーがユーザーのブラウザに保存させる小さなデータのことです。

HTTPという通信プロトコルは、本来「ステートレス(毎回の通信の状態をリセットし状態を持たない)」であり、 ユーザーがページを訪れるたびにサーバーは「このユーザー誰なのか」を忘れてしまいます。

(ステートレスな例)

  1. ユーザーが example.com/login にアクセスしてログイン
  2. サーバーは「ログイン成功!」と返す
  3. 次に example.com/mypage にアクセスすると…
     → サーバーは「このユーザー誰だっけ?」となる(状態を記憶していない)

この問題を解決するために誕生したのが Cookie です。

2. Cookieの仕組み

Cookieを使うと、サーバーが「ユーザー識別用データ」をブラウザに保存しておき、次回アクセス時にそれを自動で送信してもらえます。

Cookieの流れ

  1. ユーザーが example.com/login にアクセスしてログイン成功
  2. サーバーはレスポンスヘッダー Set-Cookie で Cookie をブラウザに送信。このとき、Cookieの値にセッションIDが含まれ、ブラウザはそれを保存
  3. 次回アクセス時にセッションIDを含むCookieを、対応するリクエストとともに送信
  4. サーバーはセッションIDをチェックし、OKならサーバーが同じユーザーと認識

HTTP リクエストを受信した後、サーバーはレスポンスに 1 つまたは複数の Set-Cookie ヘッダーを送信することができ、それぞれのヘッダーが別個の Cookie を設定します。 Cookie は、次のように名前付きの値のペアを指定することで設定されます。

例:

Set-Cookie: session_id=abc123; HttpOnly; Secure; SameSite=Lax

3.Cookieの種類

Cookieは「どのドメインの文脈で送信されるか」によって、ファーストパーティCookieとサードパーティCookieに分かれます。

[1] ファーストパーティCookie(First-Party Cookie)

現在アクセスしているサイト自身が発行・読み書きできるCookieです。

  • 発行元:ユーザーが訪問しているサイト(例:example.com
  • 保存先:そのドメイン専用(他サイトからは読めない)
  • 主な用途:
    • ログイン状態の維持(セッション管理)
    • 言語設定・テーマ(ダークモードなど)の保存
    • カート情報などのユーザー設定保持

例:

Set-Cookie: session_id=abc123; Domain=example.com

➡ サイト example.com に保存されたCookieは、
同じドメイン(example.com)からのアクセス時だけ自動送信されます。

[2] サードパーティCookie(Third-Party Cookie)

現在訪問しているドメインとは異なるドメインに対してセットされるCookie です。

たとえば、ユーザーがexample.com にアクセスしている際に、ページ内で広告タグやSNSボタンなど外部ドメイン(例:ads.example.net)のリソースを読み込むと、ブラウザがads.example.netにアクセスし、そのレスポンスでSet-Cookieヘッダーを受け取ることで、ads.example.net用のCookieが保存されることがあります。
(このように、現在表示しているサイトとは異なるドメインに対してセットされる Cookie をサードパーティCookieと呼びます。)

  • 発行元:現在のページとは異なる外部ドメイン
  • 主な用途:
    • 広告トラッキング(ユーザー行動分析)
    • 複数サイト間での行動追跡(リターゲティング広告)
    • SNSシェアボタンなどのログイン連携

例:

Set-Cookie: tracking_id=xyz987; Domain=ads.example.net; SameSite=None; Secure

➡ 上記のように SameSite=None; Secure を指定することで、ユーザーが example.com のような別ドメインのサイトを閲覧していても、埋め込まれた広告タグやトラッキングピクセル経由でads.example.net 宛てのリクエストに対して Cookieが送信されます。

ただし、SameSite=None が設定されている場合は、 Secure 属性も設定する必要があります。もし SameSite を指定しない場合は、ブラウザが自動的に Lax 扱いとし、このようなサードパーティ環境では Cookieは送信されません。

比較まとめ

項目 ファーストパーティCookie サードパーティCookie
発行元 現在閲覧中のサイト 外部ドメイン
主な用途 ログイン保持・設定保存 広告・解析・トラッキング
送信範囲 同一ドメインのみ 外部サービスにも送信可能
セキュリティ 比較的安全 プライバシー懸念が高い
ブラウザ対応 すべて有効 多くのブラウザでブロック中(Safari, Firefox, Chrome 2025年以降)

4. Cookieの属性(セキュリティ設定)

Cookieには、セキュリティや動作を制御する属性が設定できます。
設定を誤ると、情報漏えいや不正アクセスのリスクが高まります。

属性名 設定値 意味 対策効果
HttpOnly - JavaScript からアクセス不可にする XSS対策
Secure - HTTPS接続時のみ送信 通信盗聴対策
SameSite Strict / Lax / None クロスサイトでのCookie送信を制限 CSRF対策
Expires / Max-Age 日時 / 秒数 Cookieの有効期限を設定 不要な長期保持を防ぐ
Domain ドメイン名 Cookieが有効なドメインを指定 Cookieが送受信されるURLの範囲を制御
Path パス Cookieが有効なパスを指定 Cookieが送受信されるURLの範囲を制御

SameSite属性の詳細

挙動 使用例
Strict 同一サイトからのリクエストのみCookieを送信。外部サイトからのリンククリックでも送信されない 高セキュリティが必要なページ(銀行サイトなど)
Lax(デフォルト) 同一サイト + トップレベルナビゲーション(リンククリック)では送信。フォームPOSTや画像読み込みでは送信されない 一般的なWebサイト(バランス型)
None すべてのクロスサイトリクエストでCookieを送信(Secure必須) サードパーティCookie(広告、埋め込みウィジェットなど)

5. Cookieの注意点とリスク

Cookieは便利ですが、扱い方を誤ると脆弱性の原因になります。

よくあるリスク

  • XSS(スクリプト埋め込み)によるCookie盗難
  • CSRF(他サイト経由リクエスト)による不正送信
  • HTTPS未使用によるCookieの盗聴

安全対策まとめ

攻撃 対策方法
XSS HttpOnly 属性を設定
CSRF SameSiteStrict または Lax に設定
盗聴 Secure 属性+HTTPS通信を使用

6.最後に

今回、Cookieの仕組みを整理することで、セッション管理や広告トラッキングなどの理解が深まりました。
実務でも、タグ発火や検証ツールでCookieの挙動を確認する際に、この仕組みを意識して活かしていきたいと思います。

参考

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?