Hatena::Groupmoz-addon

Ci.nsIZIGOROu

2008-10-01

document.cookie の覚え書き

| 16:15 |  document.cookie の覚え書き - Ci.nsIZIGOROu を含むブックマーク はてなブックマーク -  document.cookie の覚え書き - Ci.nsIZIGOROu

ちと余り良く分かってなかったので覚え書き。

key-value の設定

key が foo で valuebar だとすると、

document.cookie="foo=bar";

で設定出来る。

ところで、a=1, b=2 と言う二つを同時に設定する事は出来ません。

document.cookie="a=1;b=2";
alert(document.cookie);

とやると a=1 しか設定出来てません。

expires の設定
var expires = new Date();
expires.setHours(expires.getHours() + 1);
document.cookie = "foo=bar;expires=" + expires.toUTCString();

のようにやる。expires 設定されたのは、foo と言うキーに対して。

現在時刻より前の時刻を設定した場合、そのkey-valueは消えます。

document.cookie="foo=;expires=" + expires.toUTCString();
domain の設定

これは謎過ぎるなぁ。。

現在 test.example.com で実行してるとして、

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);

は IE6, 7 の場合、最終的に "Z=3;Z=2" となるのだが、Fx3, Safari だと、"Z=1;Z=2;Z=3" となる。

IEの挙動のが正しいと思うんだけど。

domain が省略された Cookie は、その Cookie を生成したサーバドメイン名が指定されたとみなされます。 [Studying HTTP

とあるように、domain が省略された場合、test.example.com 相当で設定したとされるべきだと思うんだけど。

追記 (2008-10-01T17:55:36+09:00)

と思ったら、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

"." を先頭につけないのが正しいと。

まぁこれらの結果分かるのは、domain 指定がある場合、別々の物として key-value のペアが管理されますよと考えられると。

この挙動、IEとそれ以外でだいぶ異なるみたいなので注意

path の設定

結論から言うと path も domain 同様、ユニークな物として扱われるみたい。

path が省略された Cookie は、その Cookie を含んでいるヘッダによって記述されているドキュメントと同じ path が指定されたとみなされます。 [Studying HTTP

と言う事らしい。

/a/b/c/index.html とかだと path は /a/b/c/ となる。

同期の話

A, B と言うタブを開いていて、共に test.example.com のページだとすると。

A の document.cookie を弄ると、A での変更は B でも読める権限ならば即座に反映されている。

これはちょっとびっくりしました><

まとめ

って感じだな。

ゲスト



トラックバック - http://moz-addon.g.hatena.ne.jp/ZIGOROu/20081001