S-JIS[2007-06-09] 変更履歴

クッキー

ブラウザーのオプション機能である、クッキー
サーバー側で必要とする情報をクライアントのパソコン上に保持する。


クッキーの概要

クッキーは、サーバー側の指示により、情報をクライアントのマシン上に永続的に保持する機能。
クライアントがサーバーにアクセスする際には、マシン上に保持している“そのサーバー向けの情報(クッキー)”をサーバーに送信する。
永続的とは、一旦ブラウザーを閉じて(あるいはマシンの電源を切って)再度サーバーにアクセスしたときに前回の情報が残っているという意味。

クッキーは、ブラウザーのオプション機能。つまり必須ではないので、未対応のブラウザーも存在する。
また、セキュリティー上の観点からクッキーを嫌うユーザーも居り、クッキーを受け入れない設定にしているブラウザーも存在する。
つまり、Webアプリ構築の視点としては、「クッキーが常に使えるとは限らない」ということ。

対応していないブラウザーでは、クッキーが送られてきても無視するし、サーバーへクッキーを送ることもない。
したがって、サーバーからクライアントへクッキーを送ってみて、クライアントからの次の要求のときにクッキーが返ってこなければ未対応だと分かる。

サーバーからクライアントへのクッキーを送ることを「クッキーを食わせる」と言う人がいる。
単純に「クッキーを送る」と言った場合、「サーバーからクライアントへ」なのか「クライアントからサーバーへ」なのか区別できないのは確かだが。


クッキーで保持できる情報

クッキーには、名前を付けて値を保持する。
つまり複数の情報(名前)を保持することが出来るわけだが、クッキーの個数やサイズ(バイト数)の制限が多い。あまり多用できないと考えるべき。

有効期限はクッキー(の名前)毎に設定できる。ドメインやパス毎ではない。

クッキーに指定できる情報
情報 概要
名前 クッキーの名前。
名前に紐付く情報。
ドメイン このクッキーを送受信するサーバーのドメイン名。
パス このクッキーを送受信するURLのパス名。
存続期間 このクッキーの有効期間。この期間を過ぎたクッキーは破棄される。
コメント このクッキーのコメント。
バージョン このクッキーのバージョン。
セキュア このクッキーをSSL(HTTPS)のみで使うかどうか。

これらのクッキーの情報を指定するのは、サーバー側。
だが、JavaScriptでもクッキーを設定することが出来る。(JavaScriptが実行されるのはクライアント側)
しかし、JavaScriptをHTMLに埋め込んだのはサーバー側だから、「サーバー側の指示」であることに間違いは無いだろう。

IEの場合、クッキーは「C:\Documents and Settings\ユーザー\Cookies」のディレクトリ配下に、ドメイン/パス毎にファイルが作られて保存されている。


クッキーの有効範囲

クライアントにクッキーを保持させる際に、ドメインとパスを指定する。
(明示的に指定しなかった場合は、その時点のサーバーのドメインとURLが使われる)
(自分自身のURLと無関係なパスを指定することも出来るが、その場合はそのクッキーは自分の所には送られてこない)

クライアントは、自分が保持している全クッキーのドメインとパスを調べて、該当するサーバーとURLにアクセスする時のみ、そのクッキーをサーバーへ送信する(該当するクッキーは全て)。

ドメインは後方一致で該当するかどうか判断される。
例えば「google.co.jp」で登録してあったとすると、「google.co.jp」そのものはもちろん、「www.google.co.jp」といった、前方が異なるものも対象に含まれる。

パスは、文字列として前方一致で該当するかどうか判断されるのだそうだ。
例えば「/sample」で登録してあったとすると、「/sample」そのものはもちろん、「/sample/sub」(サブディレクトリ扱い)が対象に含まれる。
かつ、文字列としてマッチするかどうか判断するので、「/sample_1」というURLでも(本来なら異なるディレクトリだが)対象に含まれる

例えば/sample/c1.htmlで「/sample」というパスで「aaa=value1」というクッキーを保持し、
/sample/sub/c2.htmlで「/sample/sub」というパスで「bbb=value2」というクッキーを保持させたとすると、
「/sample/sub/c3.html」を開こうとしたブラウザーは、サーバーに「aaa=value1; bbb=value2」というクッキーを送信する。
「/sample/c4.html」を開こうとした場合は、「aaa=value1」というクッキーのみをサーバーに送信する。

参考


Webアプリへ戻る / 技術メモへ戻る
メールの送信先:ひしだま