Cookie・セッション
管理画面でお知らせを直している途中、昼休みで席を外しました。戻って保存ボタンを押したら、ログイン画面に戻されました
- HTTPは、1回ごとのやりとりを覚えていない
- Cookie(クッキー)は、サーバーがブラウザに預ける小さなデータ
- セッションは、サーバー側で「ログイン中の人」を覚えておくしくみ
- セッションIDを他人に知られると、その人になりすまされる
身近な例えで理解する
服を預けると、番号が書いてある引換券をもらいます。店は台帳に「この番号はこの人の服」と書いておきます。次に来たとき引換券を見せれば、名前を言わなくても服が出てきます。
- 引換券Cookie(ブラウザが持っている小さなデータ)
- 引換券の番号セッションID
- 店の台帳セッション(サーバー側の記録)
- 引換券を拾った人でも受け取れるセッションIDを知られると、なりすまされる
引換券には服のことは書いてありません。大事な記録は店の台帳の側にあります。
ちょっと確認
何が起きている?
例えを外して、実際のしくみ
HTTPは覚えていない
Cookieのしくみ
サーバーはレスポンスに Set-Cookie を付けて、ブラウザに小さなデータを預けます。ブラウザはそれを保存し、次から同じサーバーへのリクエストに Cookie として付けて送り返します。期限を決めたCookieは期限まで残り、期限を決めていないCookieはブラウザを閉じたときなどに消えます
セッション
ログインに成功すると、サーバーは「この番号はこの人」と記録し、番号(セッションID)だけをCookieでブラウザに渡します。サーバーは届いた番号を見て、まだ有効か確かめます。しばらく操作がないと期限切れにするのは、席を離れたすきに他人に使われないようにするためです
セッションIDを守る
セッションIDを知られると、パスワードがなくても本人になりすまされます。Cookieに Secure を付けると HTTPS のときだけ送られ、HttpOnly を付けるとページの中のプログラム(JavaScript)から読めなくなります。セッションIDの入ったURLや画面を、チャットに貼らないことも大切です
このページのまとめ
- Cookie
- サーバーがブラウザに預け、ブラウザが送り返す小さなデータ
- セッション
- サーバーが「今ログイン中の人」を覚えておくしくみ
- セッションID
- ログイン中の人を見分ける番号。Cookieで持たせることが多い
- セッションの期限切れ
- 記録が無効になり、もう一度ログインが必要な状態
先輩のひとことの意味
先輩「ログイン状態が切れたんだね。セッションの期限が切れると、もう一度ログインが必要になるんだ」
管理画面は、しばらく操作がないとサーバー側のログインの記録(セッション)を無効にします。ブラウザが古い番号を送っても、もう有効ではないので、ログイン画面に戻されたのです。「こわれたのではなく、安全のための決まった動き」という意味です。
練習問題で確かめる
Cookieの説明として正しいものは?
セッションIDを守るための考え方として、正しいものは?
参考資料
ご意見・「これで例えて!」を募集しています
ご意見・ご感想・質問・間違いのご指摘など、何でもお気軽にお寄せください。「この言葉も例えで説明してほしい」「こんな例えなら分かりやすい」という声をもとに、新しいページや例えを作ります。
- 説明してほしいITの言葉
- 例えてほしい場面(部活・アルバイト・家事など)
- 分かりにくかったところ・間違いのご指摘
意見箱は準備中です。