1. Cookieとは?
Cookieとは、サーバーがユーザーのブラウザに保存させる小さなデータのことです。
HTTPという通信プロトコルは、本来「ステートレス(毎回の通信の状態をリセットし状態を持たない)」であり、 ユーザーがページを訪れるたびにサーバーは「このユーザー誰なのか」を忘れてしまいます。
(ステートレスな例)
- ユーザーが
example.com/loginにアクセスしてログイン - サーバーは「ログイン成功!」と返す
- 次に
example.com/mypageにアクセスすると…
→ サーバーは「このユーザー誰だっけ?」となる(状態を記憶していない)
この問題を解決するために誕生したのが Cookie です。
2. Cookieの仕組み
Cookieを使うと、サーバーが「ユーザー識別用データ」をブラウザに保存しておき、次回アクセス時にそれを自動で送信してもらえます。
Cookieの流れ
- ユーザーが
example.com/loginにアクセスしてログイン成功 - サーバーはレスポンスヘッダー
Set-Cookieで Cookie をブラウザに送信。このとき、Cookieの値にセッションIDが含まれ、ブラウザはそれを保存 - 次回アクセス時にセッションIDを含むCookieを、対応するリクエストとともに送信
- サーバーはセッション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 |
SameSite を Strict または Lax に設定 |
| 盗聴 |
Secure 属性+HTTPS通信を使用 |
6.最後に
今回、Cookieの仕組みを整理することで、セッション管理や広告トラッキングなどの理解が深まりました。
実務でも、タグ発火や検証ツールでCookieの挙動を確認する際に、この仕組みを意識して活かしていきたいと思います。
参考