HTTP cookie(エイチティーティーピークッキー、単にCookieとも表記される)は、 ⇒RFC 2965などで定義されたHTTPにおけるWebサーバとウェブブラウザ間で状態を管理するプロトコル、またそこで用いられるWebブラウザに保存された情報のことを指す。ユーザ識別やセッション管理を実現する目的などに利用される。
目次
1 概要
2 用途
2.1 例
2.2 例:MediaWikiにおけるログイン情報
3 JavaScriptによるcookieの操作
4 ブラウザの環境設定によるcookieの操作
5 cookieの適用範囲と有効期限
6 セキュリティ、プライバシーの問題
6.1 セッションハイジャック
6.2 トラッキング・クッキー
7 脚注
8 関連項目
9 外部リンク
//
HTTPは元来ハイパーテキストにおいて単にファイル転送を行うために開発されたため、同じURLへのアクセスならその状況によらず同一の資源[1]を提供することが前提となっている。動的なコンテンツ生成の仕組みとしてフォームが導入されているが、これは要求に直接対応する応答だけに影響をおよぼす。言い換えるとHTTPでは、同じ瞬間に同じ内容の要求を行っていれば、そのクライアントが以前にどのような通信を行っていても区別されない。HTTPはその意味で現在においてもステートレスなプロトコルである。
その一方でWorld Wide Webが普及するにつれ、状況によって異なる内容のページを提供したい[2]というニーズが生まれた。そのようなニーズをHTTPのみで満たすには、IPアドレスによって区別する、状態を表現したユニークなURLを生成するなどの方法がある。しかし、プライベートネットワークからのアクセスを区別できない、本来二度起きない状態が同じURLにアクセスすることで何度も発生する、セキュリティの問題などいずれも容易に解決できない欠点を抱えていた。
そこで、1994年にNetscape Communications CorporationによってCookieが提案・実装された。Cookieでは次のようにサーバとクライアント間の状態を管理する。
WebサーバがWebブラウザにその状態を区別する識別子をHTTPヘッダに含める形で渡す。
ブラウザは次にそのサーバと通信する際に、与えられた識別子をHTTPヘッダに含めて送信する。
サーバはその識別子を元にコンテンツの内容をユーザに合わせてカスタマイズし、ブラウザに渡す。必要があれば新たな識別子もHTTPヘッダに含める。
以降2、3の繰り返し。
この仕組みによって、ステートレスなプロトコルであるHTTP上でステートフルなサービスを実現する。ここで注意すべき点は、一度設定されたCookieは、条件を満たす限り何度でも要求に組み込まれるという点である。HTMLページの要求だけでなく、画像を含むすべての要求が対象となる。
その後Cookieは1997年に ⇒RFC 2109で初めて標準化され、 ⇒RFC 2965で更新された。2007年現在ほとんどのWebサーバ、Webブラウザで利用可能である。
Cookieの最も代表的な用途は、ショッピングサイトにおけるカートやログイン状態の管理である。また、IPアドレスによらないクライアントの識別を可能にするため、Webサイト運営者やインターネット広告配信業者などがユーザの詳細なアクセス履歴を取得する用途にも使われる。
Cookieは毎回送られるものであり、またHTTPヘッダの一部なのでASCII文字列になっている必要がある。そのためCookieでデータを直接扱うよりも、セッションIDを実装する手段として使うことが多い。この場合、実際のデータは、セッションIDをキーとしてサーバが保持することになる。
例えば特定のページの表示回数を、ウェブページ上に表示したいときには、おおむね次のようなやりとりが行われる。
ブラウザがサーバに閲覧を要求する。ここにはcookieの情報はない。
サーバはブラウザに対し「1」回目というcookie情報と、「1回目」と表示するようなデータを送信する。
ブラウザがサーバに閲覧を要求する。このときブラウザは、そのサーバから受け取ったcookieを探して、「1」のcookie情報をサーバに送信する。
サーバは「1」というcookie情報に基づき、ブラウザに対し「2」回目というcookie情報と、「2回目」と表示するようなデータを送信する。
例として、MediaWikiにおけるcookieの使用をあげる。
MediaWikiソフトウェアでは、ログイン情報をcookieで実現している。その方法はおおむね次のようである。
ログインページからユーザ名とパスワードをサーバに送信する。この時点でcookieは使われていない。
サーバは、ユーザ名とパスワードを確認し、ユーザーにカスタマイズされた「ログイン成功」のページを送信するともに、ユーザー名とパスワードを(そのままではないが)cookieとして送信する。
次の閲覧からはブラウザがページ閲覧要求とともに先のcookieを送信する。サーバはcookie情報によってユーザにカスタマイズされたページを送信する。
ログアウトをクリックすると、「ログアウト」のページとともに、空のcookie情報を送信する。ブラウザは、先のcookie情報を空のcookie情報で上書きする。これにより最初のcookie情報は消去される。
Cookieは、HTML DOMの一部としてアクセスできる。JavaScriptをはじめとする、クライアントサイドのスクリプトは、Cookieを操作することができる。ただし後述のようにcookieには有効範囲が設定されており、そのURLにおいて有効なcookieだけがアクセス対象となる。
現在使われているウェブブラウザのほとんどはcookieの送受信が可能であり、初期状態でcookieを送受信する設定になっている。しかし、cookieの送受信をするしない、またそのcookieの内容は、ウェブ閲覧者の自由に置かれるべきものであるので、ブラウザの初期設定でそれらを操作できるようになっている。すなわち、cookieの送受信を停止する、cookieの内容を確認する、cookieを消去するといった機能がウェブブラウザに備わっている。
Cookieを設定する際、どの要求に対してcookie情報を送り返すのか、URLの範囲を指定する。規定値は、cookieを設定したサーバに対するすべての要求であり、対象を広げることも狭めることもできる。