seegongsik
ネットワーク

わかりやすく セッション クッキー とは

前に、HTTPは前のリクエストを覚えていないので、リクエストのたびに私たちをはじめてのお客のように扱うと学びました。ところが、ネットショップに一度ログインすると、しばらくのあいだログインが切れません。毎回忘れてしまうサーバーが、どうして私をずっと見分けられるのでしょうか。秘密は、小さな通行証一枚にあります。

01

忘れてしまうサーバー、切れるはずのログイン

HTTPのサーバーは、リクエストを一つ処理すると、私たちのことをきれいに忘れます。だから次のリクエストが来ると、またはじめてのお客のように扱います。
ここで、おかしな点が一つ出てきます。ログインは一回しかしていないのに、ページを移っても、なぜログインが切れないのでしょうか。サーバーが本当に毎回忘れるのなら、ページを一つ開くたびにIDとパスワードを入れ直さなければならないはずです。

私忘れっぽいサーバーログインが切れた
ボタンを押して、サーバーを訪問しましょう

訪問ボタンを押してみましょう。忘れてしまうサーバーは毎回忘れるので、訪問するたびにログインが切れ、ログインし直さなければなりません。

見てのとおり、これではあまりに不便です。ページを開くたびにログインしなければならないとしたら、すぐに疲れてしまうでしょう。
かといって、サーバーにお客の顔をぜんぶ覚えさせることもできません。リクエストには顔がありませんし、お客は数えきれないほどいます。そこで、一つ工夫をします。サーバーが覚える代わりに、お客に小さな札を一枚持たせるのです。

02

サーバーが小さな通行証を発行する

お客がはじめて来ると、サーバーはレスポンスに小さな札を一枚のせて送ります。この札をクッキーと呼び、ブラウザーが受け取って保管します。札には番号が一つ書いてあります。「あなたは7番のお客」というぐあいです。
遊園地の入り口で巻いてもらうリストバンドを思い浮かべるとわかりやすいでしょう。実際の番号は、ほかの人に推測されないように、長くてでたらめな文字で作ります。サーバーはこの番号とお客の情報を組にしておけばよいので、たくさんのお客を顔で覚える必要はありません。

これで、お客の手に番号の書かれた通行証ができました。サーバーはこの番号をそのお客と結びつけて、自分の名簿に書いておきます。買い物かごに何が入っているか、ログインしているかといった情報も、同じ行にいっしょに書かれます。
大事なのは、通行証をお客が持ち歩くという点です。サーバーがすべてを覚えるのではなく、お客が自分の番号を持っているのです。では、この通行証はいつ取り出して見せればよいのでしょうか。

03

リクエストのたびに通行証を見せる

ブラウザーは受け取った通行証をしまっておき、同じサイトへリクエストを送るたびに、自動でいっしょに差し出します。「私は7番のお客です」と言っているようなものです。使っている人が何かをする必要はありません。
リクエストの紙の片すみに番号を書いて送るのと同じです。だからサーバーは、リクエストを見るだけで、だれが送ったのかがすぐにわかります。通行証には有効期限も書いてあり、期限が過ぎるとブラウザーはもう差し出しません。

私サーバー
1回目のリクエスト
通行証7番
2回目のリクエスト
通行証7番
3回目のリクエスト
通行証7番
訪問ボタンを押して、リクエストと通行証をいっしょに送りましょう

訪問ボタンを押してみましょう。お客がリクエストといっしょに、通行証の番号を毎回差し出します。

これでお客は、リクエストのたびに同じ番号をいっしょに送ります。サーバーの側から見れば、リクエストが来るたびに番号が付いてくるわけです。
サーバーは相変わらずお客を覚えられませんが、番号がリクエストに付いてくるので問題ありません。では、サーバーはその番号を受け取って何をするのでしょうか。自分が書いておいた名簿と照らし合わせればよいのです。

04

「ああ、あの人だ!」と見分ける

通行証の番号が届くと、サーバーは書いておいた名簿を開いて、「7番はだれだったかな」と探します。名簿で7番を見つけると、「ああ、あの人だ!」と見分けます。買い物かごもログインの状態も、その行にそのまま残っています。
このように、何回ものリクエストにまたがって同じお客だということを覚えておくことを、セッションといいます。セッションのおかげで、ページを移ってもログインが切れません。ログアウトを押すと、サーバーは名簿からその行を消し、通行証は役に立たなくなります。

届いた通行証
サーバーの名簿
3番のお客
7番のお客
12番のお客
届いた通行証の番号を押して、名簿から探しましょう

届いた通行証の番号を押してみましょう。サーバーが名簿でその番号を見つけ、「ああ、あの人だ!」と見分けて、ログインを続けます。

忘れてしまうサーバーだったのに、いまでは私たちをすいすい見分けます。秘けつは、サーバーが覚えたことではなく、お客が通行証を持ち歩いたことにあります。サーバーは番号と名簿を照らし合わせるだけなので、お客がどれほど多くても軽くさばけます。
ただし、気をつけることが一つあります。番号さえ合えば、だれでもそのお客として通れてしまうのです。もしだれかが途中で、ほかの人の通行証の番号をのぞいたり盗んだりしたら、どうなるでしょうか。

05

まとめ

一言でまとめるとこうです。HTTPは前のリクエストを覚えていないので、毎回はじめてのお客のように扱います。そこでサーバーは、はじめて来たお客に、番号の書かれた小さな通行証、つまりクッキーを渡します。
ブラウザーはリクエストのたびにその通行証をいっしょに送り、サーバーは番号を名簿と照らし合わせて「ああ、あの人だ!」と見分けます。このように同じお客だということを覚えておくのがセッションです。覚える仕事はお客の通行証にまかせ、サーバーは番号を照らし合わせるだけなのです。

1. HTTPは忘れっぽく、毎回はじめてのお客
2. サーバーが通行証(クッキー)を発行
3. 訪問のたびに通行証を見せる
4. 番号で見分ける = セッション
ボタンを押して、要点を順に振り返りましょう

要点を順に押して振り返りましょう。(忘れることが問題 → 通行証(クッキー)を発行 → 訪問のたびに見せる → ああ、あの人だ!(セッション))

これで、サーバーがどうやって私たちをまた見分けるのかがわかりました。けれども、サーバーが確かめているのは通行証の番号だけです。その番号を持っている人が本当に私なのかまでは、わかりません。
ですから、番号が途中でほかの人の目にふれたら大変です。次のレッスンでは、行き来するデータに鍵をかけて途中でのぞけないようにするHTTPSを取り上げます。パスワードで本当にその人かどうかを確かめる話は、セキュリティの領域でくわしく見ていきます。

一言でいうとHTTPは前のリクエストを覚えていないので、リクエストのたびに私たちをはじめてのお客として扱います。そのままでは、ページを開くたびにログインが切れるはずです。この問題を解くのがクッキーとセッションです。はじめて来たとき、サーバーが番号の書かれた小さな通行証(クッキー)を渡し、ブラウザーは次からのリクエストのたびにその通行証をいっしょに送ります。サーバーは通行証の番号を名簿と照らし合わせて、「ああ、あの人だ!」と見分けます。このように同じお客だということを覚えておくのがセッションで、そのおかげで毎回ログインし直さなくてすみます。ただし、サーバーが見るのは番号だけなので、その番号を守ることが大切です。
← ネットワーク
このページがお役に立ったなら支援する