[JavaScript + Cookie] 空文字を使うときのブラウザ間差異
- 2008-01-30
- カテゴリ: Client Side
- タグ: Tips JavaScript Cookie
最近JavaScript + Cookieの検索ワードでこのブログにアクセスしてくれる人が多いので、JavaScript + Cookieについてもう少し勉強しなおしてみようと思った。
実は、前々から
document.cookie = 'foo';
と書いたときの動作が未検証だったので、さっそくコードを書いて動作を見てみることにした。
書いたコード
書いたコードは↓の通りの単純なもの。
document.cookie = 'foo'; document.cookie = 'bar='; document.cookie = '=baz'; document.writeln(document.cookie);
結果
動かしてみたブラウザは手元にあったIE6, Firefox2, Opera9, Safari3betaの4つ。
- IE
baz; bar
- Firefox
baz; bar=
- Opera
foo=; bar=
- Safari
=baz; bar=; foo=
全部違う…orz ありえねぇ…orz
解説
document.cookie = 'foo';
というコードを実行したときに、IEとFirefoxは
(空文字)=foo
として解釈して、名前が空文字で内容がfoo
のCookieとして解釈します。従って、
(空文字)=baz
として解釈される
document.cookie = '=baz';
によって上書きされるようですね。IEの場合、内容が空文字のCookieの場合はイコール記号(=)が省略される仕様のようです。
一方のOperaとSafariは、
foo=(空文字)
として解釈されるようです。だから、document.cookie
を再生したときにfoo=;
という部分がありますね。Operaの場合、空文字を名前とする=baz
のようなCookieは無視されるようです。
まとめ
JavaScriptで検証しただけで、Set-Cookieヘッダを使ったときも同じになるのかはわからないけど、名前が空文字になるCookieは互換性問題を引き起こすので使わないほうが無難かも。
ってか、
IEの動作はどう考えても糞。内容が空文字のときにイコール記号を省略してしまうせいで、'foo='
と'=foo'
の区別がつかない。
内容が空文字のCookieは、スクリプト言語ではそのままfalseとして判断してくれるから便利だけど、ブラウザの互換性を考えるとあまり使わないほうがいいのかな?
関連記事
- [Java] javax.swingに挑戦中
- id:amachangが関数型言語使いに
- [JavaScript + Cookie] 空文字を使うときのブラウザ間差異
- [JavaScript][Perl] 続・正規表現を使ったCSVパーサ
- [JavaScript] 正規表現を使ったCSVパーサ
トラックバック URL
- http://liosk.blog103.fc2.com/tb.php/76-1f560bd5