セッションとクッキーの違いとは?「クローク」の預かり札でわかりやすく解説

IT資格

ログイン状態を保つ仕組みを調べていると、必ず出てくる「セッション」と「クッキー」という言葉。似たタイミングで使われるため、同じもののように感じている方も多いのではないでしょうか。編集部で仕組みを調べ直してみると、この2つは「どこに何を保存するか」がまったく違う仕組みだとわかりました。

この記事では、レストランやホテルの「クローク(荷物預かり)」のたとえを使いながら、専門用語をなるべく使わずに解説します。IT資格の学習中の方や、Webシステムの仕組みを初めて学ぶ方に向けた内容です。

まず結論:セッションとクッキーは「情報をどこに置くか」が違う

細かい説明の前に、一言でまとめます。

  • クッキー(Cookie):ブラウザ(利用者側)に保存される小さなデータ。多くの場合「識別用のID」だけを持つ
  • セッション(Session):サーバー側に保存される、そのユーザーに関する実際の情報(ログイン状態など)
  • クッキーは「預かり札」、セッションは「預けた荷物本体」のような関係になっている

この2つは保存場所も役割も別物です。以下で順番に説明します。

セッションとクッキーの違い図解
クッキー(預かり札)はブラウザに、セッション(荷物本体)はサーバー側に保存される

クッキーとは?――手元に残る「預かり札」のようなもの

クッキーとは、Webサイトを訪れたときにブラウザに保存される小さなテキストデータです。次に同じサイトを訪れたときに、サーバーへ自動的に送り返される仕組みになっています。

レストランやホテルのクロークを思い浮かべてください。コートを預けると、店員から番号札を渡されます。この番号札そのものには、コートの色も素材も書かれていません。書かれているのは「番号」だけです。

  • 番号札(クッキー)は利用者の手元(ブラウザ)に残る
  • 番号札を見ても、預けた荷物の中身はわからない
  • 荷物を受け取るときは、この番号札を店員に見せる

Webの世界でも同様に、クッキーには多くの場合「セッションID」と呼ばれる識別用の文字列だけが入っています。名前・住所・カート内の商品といった実際の情報そのものは、クッキーの中には基本的に保存しません。

セッションとは?――クロークの奥で管理される「荷物本体」

セッションとは、サーバー側で管理される、あるユーザーに関する一時的な情報のまとまりです。ログイン中かどうか、カートに何を入れたか、といった情報がここに保存されます。

先ほどのクロークのたとえで言うと、セッションは「店の奥の棚に置かれた、あなたのコートそのもの」にあたります。

  • コート本体(セッション情報)は店の奥(サーバー)で管理されている
  • 利用者は番号札(クッキー)を持っているだけで、コートを直接持ち歩いているわけではない
  • 番号が一致して初めて、正しいコートが取り出される

Webシステムでは、ユーザーがログインすると、サーバー側に「このユーザーはログイン済みである」という情報を持つセッションが作られます。そして、そのセッションを識別するための番号(セッションID)だけがクッキーとしてブラウザに渡される、という流れになっています。

「セッションとクッキーの違い」をクロークの預かり札でわかりやすく解説

クッキー = 手元に残る番号札

  • 利用者の手元(ブラウザ)に保存される
  • 番号(識別情報)だけを持ち、中身の情報は基本的に持たない
  • 有効期限が切れたり、削除されたりすると使えなくなる

セッション = 店の奥で管理される荷物本体

  • サーバー側で保存・管理される
  • ログイン状態やカートの中身など、実際の情報そのものを持つ
  • サーバーが情報を破棄すれば、番号札があっても中身は取り出せない
項目クッキー(Cookie)セッション(Session)
保存場所ブラウザ(クライアント側)サーバー側
主な中身セッションIDなどの識別情報ログイン状態・カートの中身などの実データ
有効期限の管理クッキー自体に期限を設定できるサーバー側の設定で管理される(タイムアウトなど)
利用者から見える範囲ブラウザの設定画面などから中身を確認できる直接は見えない(サーバー内部の情報)
セキュリティ上の主な論点盗まれると「なりすまし」に使われる可能性があるサーバー側のリソース(メモリ・DB)を消費する

なぜクッキーだけ、セッションだけではダメなのか?

「番号札(クッキー)と荷物本体(セッション)、どちらか一方だけではダメなの?」と思うかもしれません。実はこの2つは、それぞれ単体では成立しない設計になっています。

まず、クッキーだけにログイン情報や個人情報をそのまま保存する方法も技術的には可能ですが、クッキーは利用者のブラウザに保存されるため、ネットワーク上で盗まれたり、ブラウザの設定画面から中身を見られたりするリスクがあります。重要な情報をクッキーに直接持たせるのは望ましくありません。

一方で、セッションだけを使い、クッキーのような識別情報をまったく使わない場合、サーバーは「今アクセスしてきているのが、さっきログインしたのと同じ人物か」を判断できなくなります。ページを移動するたびに毎回ログインし直す必要が出てきてしまいます。

そのため実際のWebシステムでは、「実データはサーバー側のセッションに置き、それを識別するための番号だけをクッキーとしてブラウザに持たせる」という役割分担が基本になっています。

ただし、この番号(セッションID)が第三者に知られてしまうと、その番号を使って正規ユーザーとして扱われてしまうリスクがあります。これを防ぐための実装ガイドラインは、OWASPが公開しているSession Management Cheat Sheetにまとめられており、セッションIDを推測されにくい形式にすること、HTTPS通信でのみクッキーを送信する設定(Secure属性)にすること、ログイン後にセッションIDを再発行することなどが推奨されています。

編集部としては、この「識別情報だけを手元に持たせ、実データは手元に置かない」という発想そのものが、セキュリティ設計の基本的な考え方として応用が利く部分だと感じています。

実際の使われ方:ログインからページ移動までのステップ

ECサイトにログインしてカートに商品を入れる場面を例に、セッションとクッキーがどう連携して動くか流れを見てみましょう。

Step 1 — ユーザーがID・パスワードを入力してログインする。

Step 2 — サーバーはログインを確認し、サーバー内に「ログイン済み」という情報を持つセッションを作成する。

Step 3 — サーバーは、そのセッションを識別するための番号(セッションID)を発行する。

Step 4 — サーバーはこのセッションIDを、クッキーとしてブラウザに送る。

Step 5 — ブラウザはこのクッキーを保存し、以降のページ移動のたびに自動でサーバーへ送り返す。

Step 6 — サーバーは受け取ったセッションIDを見て、対応するセッション情報(ログイン状態・カートの中身)を照合する。

Step 7 — 一致すれば「ログイン済みのユーザーとして」ページやカートの中身が正しく表示される。

このように、クッキーは「番号を運ぶ役割」、セッションは「実際の情報を保持する役割」と分担されているからこそ、ページを移動してもログイン状態が維持される仕組みが成り立っています。

まとめ:3行で理解するセッションとクッキー

  • クッキー = ブラウザに保存される「番号札」(多くは識別情報だけを持つ)
  • セッション = サーバー側で管理される「荷物本体」(ログイン状態などの実データを持つ)
  • 両方が連携して初めて成立 = 番号札(クッキー)で荷物本体(セッション)を呼び出す関係になっている

セッションとクッキーを「どこに情報が置かれているか」という軸で理解できると、Webシステムのログイン維持やセキュリティ設計の理解がぐっと深まります。IT資格の学習でも頻出のポイントなので、ぜひ押さえておいてください。

よくある質問

Q. クッキーを削除すると、ログイン状態はどうなりますか?
A. 多くの場合、ログアウトした状態と同じになります。クッキーに保存されているセッションIDが失われるため、サーバー側にセッション情報が残っていても、それを呼び出すための番号札がない状態になり、再ログインが必要になります。

Q. セッションには有効期限がありますか?
A. あります。多くのWebシステムでは、一定時間操作がないとサーバー側でセッションを自動的に破棄する「タイムアウト」の仕組みが使われています。銀行のオンラインサービスなどで一定時間操作しないと自動ログアウトされるのは、この仕組みによるものです。

Q. クッキーを無効にすると、Webサイトは使えなくなりますか?
A. サイトによります。セッションIDを保存する仕組みをクッキーに頼っているサイトでは、クッキーを無効にするとログイン状態を保てず、正常に動作しないことがあります。近年はプライバシーへの配慮からクッキーの利用に同意を求めるサイトが増えていますが、これはログイン維持に使われる種類のクッキーとは別に、広告・分析目的のクッキーも含めて同意を取得する動きが背景にあります。

Q. IT資格の試験ではセッションとクッキーはどのように出題されますか?
A. 基本情報技術者試験や応用情報技術者試験のネットワーク・セキュリティ分野では、クッキーとセッションの保存場所の違いや、セッションIDの管理に関する問題として出題されることがあります。用語の意味だけでなく、どちらの情報がクライアント側・サーバー側に置かれるかをセットで理解しておくと得点につながりやすいです。

コメント

タイトルとURLをコピーしました