[PHP] HTTPヘッダからクッキーの仕組みを理解する

クッキーはウェブサーバーとウェブブラウザ間で状態を管理する仕組みである。

Wikipediaではその動作を以下のように説明している。

クッキーでは次のようにサーバとクライアント間の状態を管理する。

1. ウェブサーバがウェブブラウザにその状態を区別する識別子をHTTPヘッダに含める形で渡す。
2. ブラウザは次にそのサーバと通信する際に、与えられた識別子をHTTPヘッダに含めて送信する。
3. サーバはその識別子を元にコンテンツの内容をユーザに合わせてカスタマイズし、ブラウザに渡す。必要があれば新たな識別子もHTTPヘッダに含める。
以降2、3の繰り返し。

この仕組みによって、ステートレスなプロトコルであるHTTP上でステートフルなサービスを実現する。ここで注意すべき点は、一度設定されたクッキーは、条件を満たす限り何度でも要求に組み込まれるという点である。HTMLページの要求だけでなく、画像を含むすべての要求が対象となる。

HTTP cookie – Wikipedia
http://ja.wikipedia.org/wiki/HTTP_cookie

サーバー・ブラウザ間でやり取りされるHTTPヘッダを実際にダンプして動作を検証してみる。

ブラウザがクッキーを食べていない状態

HTTPヘッダにはクッキーの情報が含まれていない。

サーバーからブラウザへクッキーを送信するとき

サーバーが送るHTTPヘッダにクッキーの情報が含まれている。

以後、クライアントがサーバーとやり取りするとき

クライアントが送るリクエストにクッキーの情報が含まれている。

クッキーの有効期限が切れた後

もはやクライアントはサーバーにクッキーの情報を送らない。

HTTPヘッダで見ると動作が理解しやすい。