Cookie とセッション

前提ページ:クライアントサーバモデル
推奨ページ:ウェブページの仕組み

Web アプリケーションを作成するときに、ブラウザ側でデータを保存したいことがあります。 それを叶えるのが、cookie です。


ブラウザにデータを保存させる仕組みです。 またこの保存されたデータも Cookie と呼びます。

例:Cookie: _ga=GA1.1.11882848.1574929583; _ga_J5E5G995V7=GS1.1.1574933002.2.1.1574936118.0(10 行目)

Cookieはクライアントが持っている Cookie を、サーバに提供するためのヘッダです。
{cookies}は複数の cookie(データとそれに対応するキー)を持ちます。

例:Set-Cookie: _ga=GA1.1.11882848.1574929583; _ga_J5E5G995V7=GS1.1.1574933002.2.1.1574936118.0(9 行目)

Cookieはクライアントが持つ Cookie を、サーバ側が指定するためのヘッダです。
{cookies}には、cookie として保存したい 値とそれに対応するキーをセットします。

ブラウザがサーバに HTTP リクエストを送信し, サーバが Set-Cookie を含む HTTP レスポンスを返します。

ブラウザーはこの Set-Cookie の値を保存します。

ブラウザが保存した cookie を取り出し、サーバにCookie ヘッダに付与して、HTTP リクエストを送信します。

サーバがクライアントが誰であるかを認識する仕組みをセッションといいます。 多くの場合 cookie にセッション ID と呼ばれる、ID を付加することで個人を認識します。

画像のセッション ID は、本来より短くなっていますが、もっと長い強固な ID を利用してください。

1. セッション ID をふる

サーバはセッションの ID を自動生成し、これをレスポンスに付加して渡します。 このセッション ID の生成には、十分なランダム性と長さが必要です。 ※1

2. セッション ID を利用する

二回目以降のリクエストからは、セッション ID の値から、サーバはユーザを特定します。 この例の場合、事前に保存していたセッション ID とユーザの名前が対応するデータから、ユーザ名を取り出しています。

備考

※1 HTTP は状態を持たないので、このようなことが置きます。これを「HTTP はステートレスである」といいます。
※2 セッション ID が脆弱だとなりすましが行われます。