Cookieとセッション

2020/08/31 08:32

Cookieとセッションについての概要

CookieはWEB開発でよく使われる機能の一つで、ブラウザにWEBサイトに関連した情報を保存しておける機能です。セッションは主にCookieにブラウザごとのID(セッションID)を保存しておき、ユーザーの一意性を担保する仕組みを指します。サーバーサイドで詳細な情報と関連づけることでユーザーごとに違った情報を管理します。

誤解が多いこの二つについて解説します。

Cookieとは

WEBサイトで複数のWEBページを画面遷移する際に、共通の情報(例ではユーザー名とパスワード)を保持しておけるようになる、HTTPの仕様の一つです。WEBブラウザに情報を保存して、それをサーバーへ通信するリクエストに入れて通信します。 Cookieに生の情報が入るので情報はクライアントにも保存されます。

セッションとは

Cookieに保存したID等を利用して各ブラウザを判別し、ユーザーの一意性を担保する仕組みです。ユーザーとそのユーザー専用の情報を関連づけてサーバー内で管理します(動画ではemail、パスワードが入っているような説明になってしまいましたが、セッションIDに関連付けてユーザーID保存する実装が多いです)。 Cookie内にはセッションIDのみが保存され、情報はサーバー内にのみ保存されます。

よくある誤解

Cookieとセッション本来対比される概念ではありません。CookieはHTTPの仕様で提供される機能の一つで、セッションは大抵Cookieを利用して実現されるユーザー管理の概念です。

また、セッションという言葉が様々な場所で使われるので、検索エンジンで似たような用語が一緒にヒットしてしまいます。その為、最初の頃かなり誤解してしまう人がいるようです。以下の「セッション」は今回のセッションとは異なるものです。

HTTPセッション

これはHTTP通信のプロトコルにおけるセッションの概念を説明しています。本エントリで説明しているセッションよりも、通信の実装に近い別のものを指しています。リクエストしてレスポンスする、というHTTPリクエストとレスポンスの組み合わせのことを「セッション」と説明しています。

セッションストレージ(sessionStorage)

HTML5という新しめの仕様の中に、Cookieとは別にWEBブラウザが持つ小さなデータベースに情報を保存できるWEB Storageという機能があります。こちらもまた、本エントリで説明しているセッションとは別の概念になります。

アクセス解析におけるセッション

WEBへのアクセス解析における用語にも本エントリとは別の「セッション」という言葉があります。これはアクセス解析に都合が良い単位でユーザーの行動を区切った単位を呼んでいます。

ステートレス / ステートフル

今回の文脈では、通信が複数回行われる際に、状態が維持されているのを「ステートフル」、状態が毎回クリアされるのを「ステートレス」と言います。ステートフルを実現する為の仕組みが、Cookieです。