Cookie について

クッキーというものが、いまだにピンとこない。これは、http サーバと http クライアントの間の一種の契約のようなものなのか?


次のような手順で Cookie が完成する。

  1. サーバが Cookie を作りたいと考える。http レスポンスのあるヘッダに載せて、クライアントに対して指定の Cookie を保持し、次に送ってくれるかお伺いを立てる。
  2. クライアントは、Cookie が許されるという設定のときは、サーバの要求に対して、Cookie を受け入れて、指定の期間保持する。そして、次にある URL に対して http リクエストを行う場合、その http リクエストヘッダに Cookie を載せて送る。


要は、サーバからすると「あ、また同じクライアントからリクエストが来た!」ということが知りたいわけ。


「Cookie仕様 日本語訳」によれば、

サーバからのレスポンスヘッダ
Set-Cookie: NAME=VALUE; expires=DATE;

クライアントからのリクエストヘッダ
Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2 ..

とのこと。ここがすべてのスタートだ。


PHP では、これをどう表現しているかというと、まず、クライアントから Cookie ヘッダに乗せて送られてきた、名前=値のペアは、$_COOKIEオートグローバル配列(この場合は連想配列)に入っている。"$_COOKIE['userid']" とすれば、値が取り出せる。

Cookie にもいろいろ使い道があるのだろうが、圧倒的に多く使われているケースは、セッションを保持する目的だろう。私が知っている90年代末のウェブ開発では、Cookie レベルのことを意識して、セッションを実現したものだ。(下手すると直接 Set-Cookie ヘッダとか出力してたもんね)しかし、時は移り、21世紀。そんなことを現代人がやるはずもなく、PHPでもどのバージョンからか、session_start() でセッションをスタートし、$_SESSION でセッションにグローバルは変数を取り出せるようになっている。便利便利。