Cookie のしくみ
Webサイトは、ブラウザに小さなメモ(Cookie)を預けます。ブラウザは、次にそのサイトへページをお願いする(リクエストする)とき、そのメモを付けて送ります。条件を切り替えて、メモが送られる場合と送られない場合を試しましょう。
Cookie: sid=abc123
サーバーの Set-Cookie
Set-Cookie: sid=abc123; Max-Age=60
次のリクエストの条件
送る前のチェック
- ✓ 期限 まだ有効です
- ✓ ホスト ホストが合っています
- ✓ パス パスが合っています
- ✓ 通信 条件を満たしています
- ✓ SameSite 送ってよい場面です
- ✓ ブロック設定 ブロックされていません
送られます ・ ページの JavaScript から読めます
学習用に簡単にした模型です。時間は、このモデルの中の秒です。
遊び方
目標は、③で Cookie が送られる条件と、送られない条件を見つけることです。上の「自動」を押すと、①最初のリクエスト、②サーバーの返事(Set-Cookie は「このメモを預かって」という指示)、③次のリクエスト、の順に図が進みます。まん中の「Set-Cookie」の設定と、下の「次のリクエスト」の条件を変えてみましょう。③で Cookie が送られるかどうかが、その場で変わります。送られない理由は、チェックの一覧に出ます。
もっと知る
Cookie は、サーバーが「Set-Cookie」という見出しで渡す「名前=値」の小さなメモです。ブラウザは保存しておき、条件に合うリクエストにだけ「Cookie」という見出しで付けて返します。返るのは名前と値だけで、Domain や Path などの属性は付きません。期限は Max-Age か Expires で決まり、両方あるときは Max-Age が優先され、どちらもないとブラウザを閉じたときに消える「セッション Cookie」になります。Domain を省略するとそのホストだけ、指定するとサブドメインにも送られます。ただし、サーバー自身のドメインを含まない Domain は、ブラウザが受け付けません。Secure は https のときだけ送る印、HttpOnly はページの JavaScript から読めなくする印です。SameSite は、別のサイトから来たリクエストに付けるかを決めます。Strict は同じサイトだけ、Lax は同じサイトとリンクを踏んで移動したとき、None はどこからでも(Secure が必要)で、指定がないときは Lax として扱います。なお、ここでの「サイト」は example.com のように最後の2つの名前で数える簡略化です。仕様は RFC 6265 が現行で、SameSite を含む改訂版(RFC 6265bis)は IETF で最終段階にあり、まだ RFC にはなっていません(2025年12月の版の時点)。別のサイトに埋め込まれた部品が設定する「サードパーティ Cookie」は、広告や埋め込みの部品に使われ、複数のサイトをまたいで同じブラウザを見分けることにも使えます。ブラウザごとの扱いは違い、Safari は2020年3月に既定でブロック、Firefox は2022年6月にサイトごとに Cookie を分ける方式を既定にし、Chrome は2025年4月に廃止計画を取りやめて、利用者が設定で選ぶ方式を続けると発表しました。変化の速い分野なので、最新の状況は各ブラウザの案内で確かめてください。画面の動きは学習用に簡単にした模型です。