流れ6の6語目 / 10

Cookie・セッション

ネットワーク・セキュリティ

管理画面でお知らせを直している途中、昼休みで席を外しました。戻って保存ボタンを押したら、ログイン画面に戻されました

「ログイン状態が切れたんだね。セッションの期限が切れると、もう一度ログインが必要になるんだ」
「Cookie・セッション」って、何のことだろう…?

Cookie(クッキー)は、サーバーがブラウザに預ける小さなデータです。

セッションは、サーバーが「今ログインしているのは誰か」を覚えておくしくみです。サーバーはブラウザにCookieで番号(セッションID)を持たせ、その番号で相手を見分けます。

このページで分かること読む 約3分・問題 3問
  • HTTPは、1回ごとのやりとりを覚えていない
  • Cookie(クッキー)は、サーバーがブラウザに預ける小さなデータ
  • セッションは、サーバー側で「ログイン中の人」を覚えておくしくみ
  • セッションIDを他人に知られると、その人になりすまされる

身近な例えで理解する

服を預けると、番号が書いてある引換券をもらいます。店は台帳に「この番号はこの人の服」と書いておきます。次に来たとき引換券を見せれば、名前を言わなくても服が出てきます。

  • 引換券Cookie(ブラウザが持っている小さなデータ)
  • 引換券の番号セッションID
  • 店の台帳セッション(サーバー側の記録)
  • 引換券を拾った人でも受け取れるセッションIDを知られると、なりすまされる

引換券には服のことは書いてありません。大事な記録は店の台帳の側にあります。

ちょっと確認

Q1先輩のひとこと
先輩「管理画面、しばらくさわらないとログイン状態が切れるんだよね」

何が起きている?

例えを外して、実際のしくみ

ここからは実際のしくみ
HTTPは覚えていない

HTTPのやりとりは1回ずつ独立していて、前のやりとりを覚えていません(→15 HTTP/HTTPS の「頼む→答える」の1往復)。そこで、ブラウザに目印を持たせるしくみが必要になります

Cookieのしくみ

サーバーはレスポンスに Set-Cookie を付けて、ブラウザに小さなデータを預けます。ブラウザはそれを保存し、次から同じサーバーへのリクエストに Cookie として付けて送り返します。期限を決めたCookieは期限まで残り、期限を決めていないCookieはブラウザを閉じたときなどに消えます

セッション

ログインに成功すると、サーバーは「この番号はこの人」と記録し、番号(セッションID)だけをCookieでブラウザに渡します。サーバーは届いた番号を見て、まだ有効か確かめます。しばらく操作がないと期限切れにするのは、席を離れたすきに他人に使われないようにするためです

セッションIDを守る

セッションIDを知られると、パスワードがなくても本人になりすまされます。Cookieに Secure を付けると HTTPS のときだけ送られ、HttpOnly を付けるとページの中のプログラム(JavaScript)から読めなくなります。セッションIDの入ったURLや画面を、チャットに貼らないことも大切です

このページのまとめ

Cookie
サーバーがブラウザに預け、ブラウザが送り返す小さなデータ
セッション
サーバーが「今ログイン中の人」を覚えておくしくみ
セッションID
ログイン中の人を見分ける番号。Cookieで持たせることが多い
セッションの期限切れ
記録が無効になり、もう一度ログインが必要な状態

先輩のひとことの意味

先輩「ログイン状態が切れたんだね。セッションの期限が切れると、もう一度ログインが必要になるんだ」

管理画面は、しばらく操作がないとサーバー側のログインの記録(セッション)を無効にします。ブラウザが古い番号を送っても、もう有効ではないので、ログイン画面に戻されたのです。「こわれたのではなく、安全のための決まった動き」という意味です。

練習問題で確かめる

Q24択

Cookieの説明として正しいものは?

Q34択

セッションIDを守るための考え方として、正しいものは?

参考資料

ご意見・「これで例えて!」を募集しています

ご意見・ご感想・質問・間違いのご指摘など、何でもお気軽にお寄せください。「この言葉も例えで説明してほしい」「こんな例えなら分かりやすい」という声をもとに、新しいページや例えを作ります。

  • 説明してほしいITの言葉
  • 例えてほしい場面(部活・アルバイト・家事など)
  • 分かりにくかったところ・間違いのご指摘

意見箱は準備中です。

解説・例え・練習問題はすべてオリジナルです。参考にしているのは公式ドキュメントのみです。ご意見・ご感想・間違いのご指摘など、何でもお寄せください。確認してすぐに直します。

LinuCはLPI-Japanの登録商標です。当サイトはLPI-Japanおよび他の企業・団体とは関係ありません。

運営:core