IE6: ダイアログ系ウィンドウは Cookie 引継ぎに難あり

IE6 には、window オブジェクトに showModalDialog()/showModelessDialog() というメソッドがあり、その名の通り、「ダイアログ」扱いのウィンドウを開くことができる。このウィンドウは、window.open() で開く通常のウィンドウと、いろいろなところで挙動が異なるらしい。
そのうち、昨日調べてて出てきたのを以下にメモ。

831678 - The cookie may be lost when a window is opened from a modal or modeless HTML dialog box in Internet Explorer 6
http://support.microsoft.com/kb/831678/en-us

showModalDialog()/showModelessDialog() で開いた子ウィンドウから、window.open() で孫ウィンドウを開いたとする。この孫ウィンドウは、それまでのウィンドウとは別プロセスになる。そして、既に存在している IE のプロセスを探して、一番最初に見つかったもの (一番最初に開始したもの) が持っているセッション Cookie 情報を参照する。
その時みつかったプロセスが、window.open() したのと同じなら問題ないが、別のプロセスの場合には問題が起きうる。


別サイトを開いた状態で、新規に IE のプロセスを起動し、そこでダイアログ系ウィンドウから window.open() すると、最初に開いていた方のプロセスが持っているセッション Cookie 情報を参照してしまう。逆に言うと、ダイアログの所属するプロセスが持っている Cookie は継承されず、例えば Web アプリケーションでログインセッションがタイムアウトしたものとみなされてしまったりする。