PR
図 Cookieをやりとりするしくみとその中身
図 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サーバーがCookieをWebブラウザに送信するとき,この情報だけは必ず送る。これ以外の情報は必ずしも送らなくてよい。

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

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

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


 

一般的に使われる米ネットスケープ仕様の「Cookie」(クッキー)で,その中身として含まれない情報はどれでしょうか。