Cookie(クッキー)ってなんじゃらほい?

Cookie(クッキー)とは、WebアクセスのときにWebサーバーがユーザーを識別するために使う比較的小さなテキストデータのこと。米ネットスケープ・コミュニケーションズが自社のWebブラウザ/サーバー・ソフトに実装したのが始まりだ。Webサーバー側でユーザーを識別したいとき、Webページのデータを送受信するのといっしょにCookieもやりとりされる。また、Cookieをやりとりするしくみのことも「Cookie」と呼ぶ。

Cookieには,ネットスケープが作成した仕様のほかにRFC2965がある。ただしRFC2965はあまり使われていない。ここではネットスケープの仕様について紹介する。

まずCookieの使い方を見ていこう。例えばAさんがあるWebサーバーにユーザー登録したとき、Webサーバーはその応答メッセージに相手がAさんだとわかるようなデータを含ませる。この識別データがCookieだ。そしてAさんが再び同じWebサーバーへアクセスするときには、このCookieもいっしょに送る。そうすれば、Webサーバーはアクセス元がAさんだとわかる。したがってアクセス元のAさんに「ようこそAさん」のようなWebページを返信できる。

WebサーバーがWebブラウザCookieを発行するは「Set-Cookie:」というヘッダーを使う。発行するCookieには(1)名前とその値(2)有効期限(3)適用範囲(ドメイン名とパス名)が記述されている。Webブラウザはこれら三つの情報を見て、受信したCookieの扱い方を決める。(ちなみに前述のRFC2965の場合は「Set-Cookie2:」というヘッダーになり構成要素にも差がある。)

(1)の名前とその値はCookie本体の情報である。WebサーバーがCookieWebブラウザに送信するときこの情報だけは必ず送る。これ以外の情報は必ずしも送らなくてよい。

名前はWebサーバーが勝手に付ける。名前を変えて複数のCookieを発行することもできる。Webサーバーは自分が付けた名前を覚えておき、Webブラウザから送られてきたときにその名前でCookieの種類を区別する。値はCookieそのものを表す。こちらもWebサーバーが任意の値を作ってWebブラウザに送る。この値でユーザーを識別するわけだ。

(2)の有効期限はCookieを受信したWebブラウザがその扱いを決めるために使う付加情報である。Cookieに有効期限がセットされていればWebブラウザは記載されている日時までそのCookieを使う。そのためそのCookieをハードディスクに保存する。

一方、有効期限がセットされていないCookieを受信したらWebブラウザCookieをハードディスクに保存せずパソコン内のメモリーにだけ保持する。そしてWebブラウザを終了するまで使い続けWebブラウザを閉じると同時にCookieは消える。こうしたCookieは通信の状況を管理する場合に使われるケースが多いので「セッションCookie」と呼ばれることもある。

(3)の適用範囲も有効期限と同じくCookie本体の付加情報である。Cookieの適用範囲とはWebブラウザCookieを送り返すWebサーバーを指す。ドメイン名とパス名の二つで表している。

例えばWebサーバーから「domain=d.hatena.ne.jp;path=/」と記載されたCookieが送られてきたら,WebブラウザはこのCookieを「d.hatena.ne.jp」のドメイン名を持つWebサーバーの/(ルート)以下にアクセスするときに送る。「www.microsoft.co.jp」などのようにドメイン名が一致しない場合はこのCookieは送らない。また受け取ったCookieに適用範囲の情報がセットされていなかったら、受信したWebサーバーのドメイン名とパス名を自動的にセットする。

今アクセスしているWebサーバーのドメイン名と異なるドメイン名を適用範囲とするCookieを受け取った場合は、Webブラウザは受信したCookieを無効だと判断して捨てる。つまりブラウザは、Cookieを受け取ると、自分のアクセスしているドメイン名とCookie中のドメイン名を比較する。そして両者の値が一致しない場合は、このCookieを無視するわけだ。

こうしてWebブラウザは、Webサーバーから発行されたCookieを第三者のWebサーバーに送らないようにしている。