2011年7月8日金曜日

ドメイン指定なしで発行したクッキーの、ブラウザによる挙動の違いについて

クッキー(Cookie)を発行する時、ブラウザがどのホストに対してそのクッキーを送信するかを、指定することができます。

例えば、それを「.blogger.com」と指定した場合、www.blogger.comやhoge.blogger.comに対して、そのクッキーが送信されます。

では、この指定をしなかったらどうなるかというと、ブラウザはそのクッキーを受け取ったホストに対してのみ、そのクッキーを返すようになります。

ところが、ある案件をやっていて、Internet Explorerではちょっと違う動作をすることが分かりました。

今回、foo.bar.com、v2.foo.bar.comという2つのホストで全く同じプログラムを動かしていたのですが、IEの場合のみ、foo.bar.comとv2.foo.bar.comの両方に同時にログインできない、という問題が発生したのです。

調べてみると、IEの場合、foo.bar.comで発行したクッキーがv2.foo.bar.comにアクセスした時にもサーバに送られてしまっていました。
そのため、v2.foo.bar.comに対して、同名の認証クッキーが2つ送られてしまい、v2.foo.bar.comのクッキーをfoo.bar.comのクッキーが上書きしてしまうような形になって、認証に失敗していました。

どうも、IEの場合、ドメイン指定なしで発行したクッキーに保存されるホスト名は、あくまで部分一致の対象で、完全一致でなくてもクッキー送信してしまうようです。

つまり、

■ foo.bar.comでドメイン指定なしで発行したクッキー

Internet Explorerfoo.bar.comだけでなく、v2.foo.bar.com, www.foo.bar.comなどにも送る
Firefox / Safarifoo.bar.comにだけ送る。v2.foo.bar.comやwww.foo.bar.comなどには送らない

ということのようです(Chromeについては調べていません。すみません)。

今回は、ホストによって違うクッキー名を返すようにして解決しましたが、ちょっと厄介な仕様ですね。

ちなみに、IEではFirefoxやSafariのように簡単にクッキーの内容を確認することができませんが、確認したいサイトを表示して、アドレスバーに「javascript:alert(document.cookie);」と打つと、そのサイトに送られるクッキーを表示することができるので、便利ですよ。

以下のサイトで詳しく紹介されていますので、興味のある方は見てみてください。

GEEKy Script Writer [perl and more!] IEでCOOKIE確認

関連記事


ブログランキングに参加しています。
最後に応援クリックしていただけると、とても嬉しいです!

0 件のコメント: