Cookie について
クッキーというものが、いまだにピンとこない。これは、http サーバと http クライアントの間の一種の契約のようなものなのか?
次のような手順で Cookie が完成する。
- サーバが Cookie を作りたいと考える。http レスポンスのあるヘッダに載せて、クライアントに対して指定の Cookie を保持し、次に送ってくれるかお伺いを立てる。
- クライアントは、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 でセッションにグローバルは変数を取り出せるようになっている。便利便利。