[3] [[Cookie]] 設定時の [DFN[[CODE(HTTP)@en[[[Domain]]]] [[属性]]]]は、その [[Cookie]] の対象となる[[ドメイン名]]を指定します。 * 仕様書 -[1] [[Netscape Cookie]]: [CITE[Client Side State - HTTP Cookies]] * 処理モデル ** 末尾一致 [4] [[妥当]]な [[Cookie]] を探す際に、[[Cookie]] の [CODE(HTTP)@en[[[Domain]]]] [[属性]]と、 [[fetch]] しようとしている [[URL]] の[[ドメイン名]]の部分とを比較します。 ここで[[末尾一致]]していれば、更に [CODE(HTTP)@en[[[Path]]]] の比較へと進みます。 [SRC[>>1]] 一致していなければその [[Cookie]] は妥当ではなく、[[HTTP]] [[要求]]の [CODE(HTTP)@en[[[Cookie:]]]] [[頭欄]]には含まれません。 [5] ここで[DFN[[RUBYB[[[末尾一致]]]@en[tail matching]]]]とは、 [[fetch]] しようとしている[[ホスト]]の[[完全修飾ドメイン名]] ([[FQDN]]) の末尾に [CODE(HTTP)@en[[[Domain]]]] [[属性]]の値が一致することをいいます。 [SRC[>>1]] ;; 例えば、 [CODE(HTTP)@en[[[Domain]]=acme.com]] は [CODE@en[anvil.acme.com]] や [CODE@en[shipping.crate.acme.com]] と一致します。 [SRC[>>1]] [11] 仕様上明記されていませんが、[[ドメイン名]]は[[大文字・小文字を区別しない]]ので、 この[[一致]]の際も差異は無視されるものと思われます。 ** 第3者発行 [6] [CODE(HTTP)@en[[[Domain]]]] で指定された[[ドメイン]]に属する[[ホスト]]だけがその[[ドメイン]]の [[Cookie]] を設定することができます。 [SRC[>>1]] ** TLD [7] [CODE(HTTP)@en[[[Domain]]]] で設定する[[ドメイン名]]には少なくても2つか3つの [CODE(char)[[[.]]]] が含まれていなければなりません。基本的には3つ以上で、2つでもよいのは [CODE@en[[[.com]]]], [CODE@en[[[.edu]]]], [CODE@en[[[.net]]]], [CODE@en[[[.org]]]], [CODE@en[[[.gov]]]], [CODE@en[[[.mil]]]], [CODE@en[[[.int]]]] の7つの [[gTLD]] だけです。 [SRC[>>1]] [10] [[FQDN]] であることを明示する際に [CODE[foo.example.]] のように最後に [CODE[[[.]]]] を付けることがありますが、これと >>4 の処理モデルや >>7 の制約との関係は仕様上明確にされていません。 ** IDN [9] [[Cookie]] が定義されたのは [[IDN]] 導入の遥かに前であり、仕様上は [[IDN]] の扱いが明確になっていません。 ** 既定値 [8] [CODE(HTTP)@en[[[Domain]]]] [[属性]]が指定されていない場合は [[Cookie]] [[応答]]を生成した[[ホスト]]の名前が指定されたとみなします。 [SRC[>>1]] * メモ [2] [CITE[document.cookie の覚え書き - Ci.nsIZIGOROu - Mozilla 拡張機能勉強会]] ([TIME[2009-02-01 18:27:09 +09:00]] 版) >現在 test.example.com で実行してるとして、 [PRE(JS example code)[ document.cookie = "Z=1"; alert(document.cookie); document.cookie = "Z=2;domain=example.com"; alert(document.cookie); document.cookie = "Z=3;domain=test.example.com"; alert(document.cookie); ]PRE] は IE6, 7 の場合、最終的に "Z=3;Z=2" となるのだが、Fx3, Safari だと、"Z=1;Z=2;Z=3" となる。 >domain が省略された場合、test.example.com 相当で設定したとされるべきだと思うんだけど。 > と思ったら、domain パラメータの挙動について見ている所が netscape の決めた奴と言う古い奴見てた事が判明。 >> :Domain=domain:Optional. The Domain attribute specifies the domain for which the cookie is valid. An explicitly specified domain must always start with a dot. >> RFC 2109 - 4.2.2 Set-Cookie Syntax >つまり、指定するなら "." から開始しないとだめぽって事。 >省略した場合の挙動は、 >> Domain Defaults to the request-host. (Note that there is no dot at the beginning of request-host.) >>RFC 2109 - 4.3.1 Interpreting Set-Cookie >"." を先頭につけないのが正しいと。 >[DEL[まぁこれらの結果分かるのは、domain 指定がある場合、別々の物として key-value のペアが管理されますよと考えられると。]] >[INS[この挙動、IEとそれ以外でだいぶ異なるみたいなので注意]]