例えば、それを「.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 Explorer | foo.bar.comだけでなく、v2.foo.bar.com, www.foo.bar.comなどにも送る |
---|---|
Firefox / Safari | foo.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 件のコメント:
コメントを投稿