「セッションが切れました」の正体を知っていますか?CookieとセッションをIT初心者向けにわかりやすく解説

Webを使っていると、こんな表示を目にしたことがあるはずです。

「セッションが切れました。再度ログインしてください。」

「このサイトではCookieを使用しています。同意しますか?」

なんとなくスルーしてきた人も多いと思いますが、これらはWebの裏側で動いている重要な仕組みです。

CookieとセッションはWebサービスを「快適に使える状態」に保つために欠かせない技術で、

ログイン状態の維持やショッピングカートの中身の保存など、日常的に私たちの体験を支えています。

この記事では、ITやWeb技術に詳しくない方でも

「なるほど、そういうことか」と腑に落ちるよう、丁寧に解説していきます。

おねしゃす


目次

まず知っておきたい:Webはそもそも「記憶しない」仕組みになっている

Cookieやセッションがなぜ必要なのかを理解するには、

まずHTTPという通信の仕組みを少しだけ知っておく必要があります。

ブラウザとWebサーバーは「HTTP」というルールを使って会話しています。

このHTTPには大きな特徴があって、

リクエストのたびに「初対面」として扱うという性質を持っています。

これを「ステートレス(stateless)」と言います。

たとえばショッピングサイトでログインしたとします。

でも次のページに移動した瞬間、HTTPの仕組みの上ではサーバーはあなたのことを

「誰?」

と忘れてしまう、というのが本来の状態です。

これだと困りますよね。

「カートに商品を入れたのに、次のページに行ったら消えていた」なんてことになってしまいます。

そこで登場するのがCookieとセッションです。

この「記憶しない」という制約を補うために生まれた技術です。


Cookieとは何か――ブラウザが持つ「メモ書き」

Cookieは、Webサイトがブラウザに渡す小さなメモ書きのようなものです。

サイトを訪問すると、サーバーは

「この情報を手元に持っておいてください」

とブラウザにデータを送ります。

ブラウザはそれをCookieとして保存し、

次回同じサイトを訪問したときに「あのときのメモです」と自動的に送り返します。

身近なもので例えるなら、スタンプカードに近いイメージです。

お店(サーバー)が最初に来たとき「このカードを持っておいてください」と渡します。

次回来店したとき(次回アクセス)にそのカードを見せることで、

「ああ、あのお客さんだ」と認識してもらえる仕組みです。

Cookieが使われている身近な場面としては、以下のようなものがあります。

  • ショッピングサイトの「ログインしたままにする」機能
  • 「この言語設定を覚えておく」といったユーザー設定の保持
  • 広告のリターゲティング(一度見た商品の広告が他のサイトでも出るアレです)

Cookieはブラウザ、つまりあなたの手元のPCやスマートフォンに保存されるという点が重要です。

中身をブラウザの開発者ツールで確認することもできますし、あなた自身が削除することもできます。

有効期限を設定することもでき、期限が切れると自動的に消えます。


セッションとは何か――サーバー側の「一時管理票」

セッションは、Cookieとよく一緒に語られますが、保存される場所がまったく違います

セッションは、サーバー側に保存される「一時的な管理票」のようなものです。

ユーザーがサイトにアクセスしてからログアウト(または離脱)するまでの一連の流れを

「セッション」と呼び、その間の情報(ログイン状態、カートの中身など)をサーバーが管理します。

イメージとしては、病院の受付番号票が近いかもしれません。

受付でもらった番号セッションID)を持っていることで、

「今日この病院に来ているAさん」だと識別してもらえます

ただし診察が終わって帰宅すれば(セッションが切れれば)、その番号は無効になります。

セッションには有効期限があり、一定時間操作がないと「セッションが切れました」となります。

ネットバンキングや予約サイトで

「長時間操作がなかったため、最初からやり直してください」と表示されるのはこのためです。

セキュリティの観点から、大切な情報は長時間保持しないようにしているわけです。

長期間データを保持しないこともセキュリティの観点では大切。


Cookieとセッションはセットで動いている

ここで「Cookieとセッションはそれぞれ別々に存在するの?」と思う方もいるかもしれません。

実際には、多くの場合この二つはセットで使われています

仕組みを順番に見てみましょう。

  1. あなたがショッピングサイトにログインします
  2. サーバーは「この人はログイン済み」という情報をセッションとしてサーバー内に記録します
  3. 同時に「あなたの整理番号はXXXXです」というセッションIDをCookieとしてブラウザに渡します
  4. 次のページに移動するとき、ブラウザは自動的にそのCookieをサーバーに送ります
  5. サーバーは受け取ったセッションIDで照合し、「ああ、さっきログインした人だ」と認識します

つまり、Cookieは「整理番号の紙」、セッションは「整理番号にひもづいた台帳」というイメージです。

整理番号(Cookie)があるから台帳(セッション)が引けて、初めて「この人」と分かる仕組みになっています。


Cookie vs セッション 比較表

項目Cookieセッション
保存場所ブラウザ(ユーザー側)サーバー側
有効期限設定による(長期保持も可能)ブラウザを閉じるか一定時間で切れる
保存できる情報量小さい(4KB程度)比較的大きい
セキュリティユーザーが見られる・改ざんリスクありサーバー管理なので比較的安全
主な用途ログイン維持、設定保存、広告追跡ログイン中の状態管理、カートの中身

やりがちな誤解とNG・OKの考え方

Cookieに個人情報を直接入れても大丈夫?

NG例: ユーザーIDやパスワード、クレジットカード番号をそのままCookieに保存する

Cookieはブラウザに保存されていて、開発者ツールを使えば誰でも中身を見ることができます。もし重要な個人情報を直接入れてしまうと、情報漏洩のリスクがあります。


OK例: 意味のないランダムな文字列(セッションID)だけをCookieに持たせ、実際の個人情報はサーバー側のセッションで管理する

「整理番号」だけを持たせることで、万が一Cookieが漏れても実際の情報には簡単にアクセスできない設計にするのが正しいアプローチです。

セッションが切れた=バグじゃないの?

NG例: セッションが切れるのは不具合だと思い込む

セッションが一定時間で切れるのは、意図的な設計です。

特にネットバンキングや医療系サービスでは、

ログインしたまま席を離れたときのリスクを下げるために短めに設定されています。

OK例: セッション切れは「セキュリティのための仕組み」と理解した上で、大切な操作は連続して行うよう意識する

セキュリティ的な話:Cookieとセッションを悪用した攻撃が存在する

Cookieとセッションは便利な技術ですが、

Webの根幹を支える技術だからこそ、攻撃者に狙われることがあります

代表的なものを2つ紹介します。

セッションハイジャック

セッションIDが第三者に盗まれると、その人があなたになりすましてサイトを操作できてしまいます。

これを「セッションハイジャック」と言います。

空港やカフェなどの公共Wi-Fiを使っているときに通信が盗聴され、

Cookieに入っているセッションIDを抜き取られるというのが典型的な手口です。

セッションIDさえ持っていれば、

パスワードを知らなくてもログイン済みの状態を乗っ取ることができてしまいます。

なにそれこわい

対策としては

  • [サイト側] HTTPS(通信の暗号化)を使うこと
  • [サイト側] セッションIDを定期的に変更すること
  • [ユーザー側] 公共Wi-Fiでのネットバンキングなど重要な操作を避けること

などが有効です。

クロスサイトリクエストフォージェリ(CSRF)

少し難しい名前ですが、仕組みはシンプルです。

あなたが銀行サイトにログイン中の状態で、悪意のある別サイトを開いてしまったとします。

そのサイトに仕掛けられたコードが、あなたのブラウザを使って

「銀行サイトへの送金リクエスト」を勝手に送ってしまう、という攻撃です。

ブラウザはCookieを自動送信する仕組みになっているため、

ログイン済みのCookieがそのまま悪用されてしまいます。

あなたは何もしていないのに、操作したことにされてしまうわけです。

こっわ

対策として、現在のWebサービスの多くはCSRFトークンという

そのページから送られた本物のリクエストかどうかを確認する合言葉」を導入しています。


どちらの攻撃も、Cookieやセッションそのものが欠陥というわけではありません。

正しく設計・運用されていれば安全に使える技術です。

ただ、「仕組みを知っている人が悪用しようとすることがある」

という事実を知った上で、公共の場での操作には注意する習慣をつけておくと安心です。

ちなみに
「クロスサイトリクエストフォージェリ(Cross-Site Request Forgery)」の英語の意味を解説すると

Cross-Site(クロスサイト)
「cross」は「横断する・またぐ」という意味です。「サイトをまたぐ」、つまり別のWebサイトから仕掛けてくるという意味合いです。

Request(リクエスト)
「要求・依頼」という意味です。Web文脈では、ブラウザがサーバーに送る「このページを見せて」「この操作をして」という命令のことを指します。

Forgery(フォージェリ)
「偽造・なりすまし」という意味です。パスポートや紙幣の偽造にも使われる単語で、「forge(鍛造する・偽造する)」が語源です。

つまり直訳すると「別サイトから仕掛けた、なりすましリクエスト」となります。
攻撃の中身をそのまま英語にした名前なので、意味を知ると攻撃の本質がスッと頭に入ってくると思います。略称の CSRF もそのままの頭文字で、「シーサーフ」と読まれることも多いです。

おそろシーサー

まとめ

CookieとセッションはWebを「記憶があるように使える状態」にするための仕組みで、

二つはセットで機能することがほとんどです。

  • Cookie:ブラウザ側に保存される「整理番号の紙」。次回アクセスのときに自動で送られる
  • セッション:サーバー側に保存される「台帳」。整理番号と照合して、誰がアクセスしているかを把握する
  • セッションが切れるのは不具合ではなくセキュリティ設計の一部

「セッションが切れました」と表示されたとき、

もう「ああ、サーバー側の記録が消えたんだな」とすんなり理解できるはずです。

Webの裏側の仕組みを知ると、毎日使っているサービスの見え方が少し変わってきますよ。

勉強なりました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次