Cookieとセッション
2020/08/31 08:32
誤解の多いCookieとセッションについてわかりやすく動画で解説しました。Cookieを利用して情報を管理した場合の構成と、セッションを利用した場合のそれを確認しています。2本の動画で、それぞれ10分強の長さです。
Cookieとセッションについての概要
CookieはWeb開発でよく使われる機能の一つで、ブラウザの中にWebサイトに関連した情報を保存しておける機能です。セッションは主にCookieにブラウザごとのID(セッションID)を保存しておき、ユーザーの一意性を担保する仕組みを指します。サーバーサイドで詳細な情報と関連づけることでユーザーごとに違った情報を管理します。
誤解が多いこの二つについて解説します。
Cookieとは
Webサイトで複数のWebページを画面遷移する際に、以降のページでも利用したい情報(例ではユーザー名とパスワード)を保持しておけるようになる、HTTPの仕様の一つです。Webブラウザに情報を保存して、それをサーバーへ通信するリクエストに入れて通信します。 Cookieの情報はクライアントに保存されます。
セッションとは
Cookieに保存したID等を利用して各ブラウザを判別し、ユーザーの一意性を担保する仕組みです。ユーザーとそのユーザー専用の情報を関連づけてサーバー内で管理します(動画ではemail、パスワードが入っているような説明になってしまいましたが、セッションIDに関連付けてユーザーID保存する実装が多いです)。 Cookie内にはセッションIDのみが保存され、情報はサーバー内にのみ保存されます。
セッションの実装にCookieを使用しない方法もありますが、多くのWebシステムではCookieを活用していることが多いです。
よくある誤解
Cookieとセッション本来対比される概念ではありません。CookieはHTTPの仕様で提供される機能の一つで、セッションは大抵Cookieを利用して実現されるユーザー管理の概念です。
また、セッションという言葉が様々な場所で使われるので、検索エンジンで似たような用語が一緒にヒットしてしまいます。その為、最初の頃かなり誤解してしまう人がいるようです。以下の「セッション」は今回のセッションとは異なるものです。
HTTPセッション
これはHTTP通信のプロトコルにおけるセッションの概念を説明しています。本エントリで説明しているセッションよりも、通信の実装に近い別のものを指しています。リクエストしてレスポンスする、というHTTPリクエストとレスポンスの組み合わせのことを「セッション」と説明しています。
セッションストレージ(sessionStorage)
HTML5という新しめの仕様の中に、Cookieとは別にWebブラウザが持つ小さなデータベースに情報を保存できるWeb Storageという機能があります。こちらもまた、本エントリで説明しているセッションとは別の概念になります。
- 参考: https://developer.mozilla.org/ja/docs/Web/API/Web_Storage_API
- 参考: https://developer.mozilla.org/ja/docs/Web/API/Window/sessionStorage
アクセス解析におけるセッション
WEBへのアクセス解析における用語にも本エントリとは別の「セッション」という言葉があります。これはアクセス解析に都合が良い単位でユーザーの行動を区切った単位を呼んでいます。
ステートレス / ステートフル
今回の文脈では、通信が複数回行われる際に、状態が維持されているのを「ステートフル」、状態が毎回クリアされるのを「ステートレス」と言います。ステートフルを実現する為の仕組みが、Cookieです。