Cookie

読み:クッキー
外語:Cookie
発音:kúki
品詞:名詞

Webサーバがクライアント(ユーザエージェント。Webブラウザなど)に送信してくるデータのこと。

次回、このクライアントがそのサーバにアクセスした時にその情報を送信することによって、サーバがそのクライアントを識別し、継続的な処理を行なうことができる。

WWWデータの送信に用いられるHTTPは、クライアントからの1回のリクエストに対して1つのファイルを送信するという1往復で完結する仕組みになっている。ある時にアクセスして来たクライアントが、直前にアクセスして来たクライアントと同じものか違うものか、判別する機能をプロトコルとして持っていない。

多くの場合にはこれでも良いが、金銭や個人情報などを扱う場合には、正しいパスワードを入力したクライアントと現在アクセスしているクライアントとが同じものかどうか識別できなければならない。また、以前アクセスしてきたクライアントと同じものであることをサーバが認知できるなら、例えば掲示板のハンドル名欄に最初から前回入力された名前を表示するとか、ショッピングサイトで購入履歴からその顧客の好みそうな物を表示するなど、利便性を向上させることも出来るだろう。

Cookieを用いると、一度そのWebページから離れていっても、再びアクセスした際にサーバに受け取ったCookieを送り返すことで、再び以前の続きなどを行なうことができる。

プライバシー的な問題もあり、サーバ側に情報が送られるのが嫌だという場合には、WebブラウザのCookieの要求を無視する設定も可能である。但しこの場合は情報の保存機能も利用できなくなる。ログインを要求するサイトの場合、ログインできなくなる恐れもある。

Cookieの情報は、HTTPヘッダとして送受信される。

この情報は、ドメイン名、URLパス、有効期限、名前、データという5種類の項目で構成されている。

サーバ→クライアント

具体的には、「Set-Cookie: NAME=VALUE; expires=DATE; path=PATH; domain=DOMAIN_NAME; secure」のような書式でサーバからクライアントにCookieは送信される。

一度のHTTPアクセスで複数のSet-Cookieを送ることができる。

NAMEやdomain、path属性をキーとし、重複するものは上書きされ、さもなくば保存される。一つのdomain/pathあたり複数のNAMEで情報を保存させることも可能。例えばWeb掲示板なら、利用者の名前やメールアドレスなどを保管する等が考えられる。

うち必須項目はNAMEのみで、残りはオプションである。

NAME属性

Cookieの名前を示す必須の項目である。原則として英数文字を使用する。セミコロンやカンマ、空白文字、日本語文字などを使用する場合は、%を使ってエスケープしなければならない。

NAME属性の引数はOPAQUE_STRINGと呼ばれ、受信したものを後にサーバに送り返すのは、この内容である。

expires属性

Cookieの有効期限(クッキーなので賞味期限と言うべきか)を示す。書式は電子メールRFC 2822等と同等だとされている。

曜日, DD-Mon-YYYY HH:MM:SS タイムゾーン

  • 曜日 ‐ 英語で。3文字ないしフルスペル
  • DD ‐ 日は2桁
  • Mon ‐ 月は英語3文字(Jan, Feb...)
  • YYYY ‐ 年は西暦で4桁
  • HH ‐ 時は24時制で2桁、00〜23
  • MM ‐ 分は2桁
  • SS ‐ 秒は2桁
  • タイムゾーン ‐ UTCからの時差を表わす

規格上、タイムゾーンをどう表現するかは明確ではないが、RFC 822(現RFC 2822)と同等と明記されているため、次のように実装するのが一般的。

タイムゾーンは3ないし4桁で、-9999〜+9999。UTCより進んでいれば(日本、オーストラリア等)+、遅れていれば(アメリカなど)-とし、その後に数字4桁(上2桁は時間、下2桁は分)。例えば日本は+0900。UTC(GMT)は+0000で表わす(-0000ではない)。また、タイムゾーンの名称(GMTなど)でも良い。

domain属性

Cookieを発行したサーバのドメイン名。クライアントは、今アクセスしようとしているドメインに関するCookieを持っている場合にそれをサーバに送出するが、これを検索する際にdomain属性を検索キーに用いる。比較基準は部分一致対応で、後方一致である。

つまりdomain=wdic.orgであれば、www.wdic.orgというドメインと一致すると判断される。

path属性

Cookieを発行したURLのうちドメイン名を除いたもの。先のdomain属性と共にURLを作ることができる。

比較基準は部分一致対応で、前方一致である。

pathは/から始める。最も単純なものは「path=/」である。

secure属性

この属性がある場合は、そのCookieはHTTPSなど安全な経路においてのみ送信されることを示す。

クライアント→サーバ

ユーザエージェント(クライアント)はHTTPサーバ接続の際、自己が保持する全てのCookieからアクセス先ドメインに関連するものを検索し、該当するものを1行にまとめてHTTPヘッダとして送信する。

具体的には「Cookie: NAME1=OPAQUE_STRING1; NAME2=OPAQUE_STRING2; …」のような書式でクライアントからサーバにCookieは送信される。

ローカルマシンでのCookieのありか

Windows 9x系でIE4以降では "C:\WINDOWS\Temporary Internet Files" に "Cookie:username@url" という名のテクストファイルとして保存される。

Windows 2000なら "C:\Documents and Settings\username\Cookies" フォルダに "username@url.txt" と名前の付いたテクストファイルとして保存される。一つにつき1ファイルとなるので、読むのも書き換えるのも削除するのも容易という利点がある。

Netscape Navigatorの場合には "C:\Program Files\Netscape\Users\default\cookies.txt" などのファイル(任意変更可)に1行1url形式で格納される。この形式は無駄にファイルが増えないという利点があるが、所定のURLのみの削除が難しく、また読みづらいという問題点がある。但し、通常は人間が読み書きするものではない。

Cookieの削除方法

Internet Explorerの場合、ツール→インターネットオプション→Cookieの削除ボタン、である。

Mozilla Firefoxの場合、ツール→オプション→プライバシータブ→Cookieを表示ボタン→すべてのCookieを削除ボタン、である。

Operaの場合、ツール→設定→詳細設定タブ→Cookie→Cookie設定→削除ボタン、である。