[11] [[Cookie]] 設定時の [DFN[[CODE(HTTP)@en[[[Path]]]] [[属性]]]]は、[[Cookie]] が適用される [[URL]] の [[path]] 部分を[[前方一致]]で指定します。 * 仕様書 - [12] [[Netscape Cookie]]: [CITE[Client Side State - HTTP Cookies]] * 処理モデル [13] [[Cookie]] が[[妥当]]であるか判断する際、 [CODE(HTTP)@en[[[Domain]]]] が[[一致]]すると判断されると次に [CODE(HTTP)@en[[[Path]]]] の比較が行われます。 [[要求]]しようとしている [[URL]] の [[path]] の部分の前方が [CODE(HTTP)@en[[[Path]]]] [[属性]]の値と一致していれば、 [CODE(HTTP)@en[[[Path]]]] [[属性]]は一致したものとみなされます。 [SRC[>>12]] [14] この[[一致]]を調べるに当たって [[path]] は不透明なものとして扱われます。つまり、 [CODE(URI)[[[/]]]] による階層の区切りは考慮されません。 [CODE(HTTP)@en[[[Path]]]] [[属性]]の値 [CODE(URI)[[[/foo]]]] は、 [CODE(URI)@en[/foo/bar.html]] だけではなく [CODE(URI)[/foobar]] にも一致します [SRC[>>12]]。 [16] [[百分率符号化]]の扱いは仕様上明記されていません。 [17] [CODE(URI)[http://foo.example]] のように [[path]] がない (厳密に言えば [[path]] が[[空文字列]]である) [[URL]] もありますが、[[HTTP]] [[要求メッセージ]]上の [[Request-URI]] は [CODE(URI)@en[[[/]]]] になります。これに一致する [CODE(HTTP)@en[[[Path]]]] は [CODE(URI)@en[[[/]]]] です。[CODE(URI)@en[[[/]]]] はその[[ホスト]]のすべての [[URL]] に一致することになります。 [18] [CODE(HTTP)@en[[[Path]]]] [[属性]]の値が[[空文字列]]である時の扱いは明記されていません。 ** 百分率符号化 [19] [[百分率符号化]]、[[非ASCII文字]]や [[URI]] [[RFC]] 上で認められていない[[文字]]の扱いについては仕様上明記されていません。 ** 既定値 [15] [CODE(HTTP)@en[[[Path]]]] が省略された場合、[[Cookie]] が含まれる[[応答]]が帰ってきた[[要求]]の [[URL]] の [[path]] と同じとみなされます。 [SRC[>>12]] ** 第3者発行 ;; [32] [[RFC 2109]]、[[RFC 2965]] では、[CODE(HTTP)@en[[[Path]]]] が [[request-URI]] の[[接頭辞]]でない場合にはその [[Cookie]] を[RUBYB[[[蓄積]]]@en[store]]しては[['''ならない''']]とされていました [SRC[>>31, >>30]]。 ;; ;; [33] [[RFC 2109]]、[[RFC 2965]] の定義では「[[request-URI]]」は [[path]] 部分のことです。 * 保安性に関して [9] [[HTML5]] の [CODE(JS)@en[[[document.cookie]]]] [[属性]]に関する節の注記 ([[参考]]) には、次のような記述があります。 - [CODE(JS)@en[[[document.cookie]]]] [[属性]]は[[フレーム]]を超えてアクセス可能である - [[クッキー]]の[[経路]]制限は[[クッキー]]が[[Webサイト]]のどの部分に送られるかの管理を助ける道具に過ぎない - [[クッキー]]の[[経路]]制限は[[保安性]]のための機能ではない ;; * 歴史 [20] この[[属性]]は [[Netscape Cookie]] で当初より規定されていました。 [21] 後に [[IETF]] で標準化された [CODE(HTTP)@en[[[Set-Cookie:]]]] ([[RFC 2109]])、 [CODE(HTTP)@en[[[Set-Cookie2:]]]] ([[RFC 2965]]) でも同様の定義となっています。 ;; [[IETF]] の仕様は [[Netscape Cookie]] とは互換性がありません。 [[属性]]の値はそのまま記述するのではなく、 [RUBYB[[[字句]]]@en[[[token]]]]または[RUBYB[[[引用文字列]]]@en[[[quoted-string]]]]とする必要があります。 [28] [[RFC 2109]] では、[CODE(HTTP)@en[[[Path]]]] が省略された場合、当該[[要求]]の [[path]] の一番最後の [CODE(URI)[[[/]]]] の''直前''までが[[既定値]]とされていました [SRC[>>25]]。 [29] [[RFC 2965]] では、 [CODE(HTTP)@en[[[Path]]]] が省略された場合、当該[[要求]]の [[path]] の一番最後の [CODE(URI)[[[/]]]] ''まで''が[[既定値]]とされていました [SRC[>>26]]。 ** 仕様書 - [22] [DEL[[[RFC 2109]]]] ([[廃止]]済み) -- [24] '''[CSECTION@en[4.2.2 Set-Cookie Syntax]]''' -- [25] [CSECTION@en[4.3.1 Interpreting Set-Cookie]] -- [31] [CSECTION@en[4.3.2. Rejecting Cookies]] - [23] [[RFC 2965]] -- [27] '''[CSECTION@en[3.2.2 Set-Cookie2 Syntax]]''' -- [26] [CSECTION@en[3.3.1 Interpreting Set-Cookie2]] -- [30] [CSECTION@en[3.3.2 Rejecting Cookies]] * メモ [10] [CITE@ja[Javascriptのdocument.cookieのpath]] ([TIME[2009-02-01 19:38:32 +09:00]] 版) >document.cookieで四苦八苦しておりまして、Safari、Firefox、Chromeではちゃんと動くのにIE6とIE7では動かないという事態に直面した際の話です。 > 端的に申しますとdocument.cookieのpathはIEに関してはフォルダ単位でしか動きません。 そのほかのモダンブラウザではちゃんと動きます。ほとほとIEには困ったものです。 > なので、location.pathnameを直接pathに通すとcookieが書き込まれないという事態に陥る