明けましておめでとうございます。書初めが遅くなってしまいました。
今年もマニアックな話題でわかる人にだけニヤリとして貰おうと考えています。
IEでセッションが突如切れるバグ
http://support.microsoft.com/kb/315713
http://support.microsoft.com/kb/935778/ja
条件が複雑なのですが、
以下の条件をすべて満たす場合、Internet Explorer で保持するべきはずのセッション cookie が失われます。
- Internet Explorer 5.5 以降を使用している
- セッション cookie を使用している(cookie に有効期限が設定されていない)
- ローカルファイルを使用している
(ホームページを c:\homepage.html や \\server\share\homepage.html にしている、file:// で始まる URL を使用している、など)
- 新しいウィンドウを開く(ウィンドウの数を増やす)ような操作を行っている
(window.open や window.showModalDialog で子ウィンドウを開く、リンクを [新しいウィンドウで開く] など)
- ウィンドウを閉じる(ウィンドウの数を減らす)操作を行った後、残りウィンドウの数が 1 つ(または 0)になった
といった条件で発生します。
説明によると、ウィンドウのカウントを誤るらしく、ウィンドウが残り1個になった時点で
0個と誤ってセッションをクリアしてしまうようです。
なんだかすぐに対応できそうなバグに思えますが、IE5.5 → IE6 → IE7の2度のメジャーバージョンアップを
乗り越えて生き続けるバグですから、何か根深いものでもあるのでしょう。
通常、リンクミスでもない限り、WEBシステムでローカルのファイルを使うことはないわけですが、
どうやら、ブラウザのキャッシュが表示される条件下では「ローカルファイルを使用している」が
満たされてしまうようです。
回避策としては
- cookie に有効期限を設定する
- HTML ファイルをローカルに置かせずに HTTP サーバー上に置く
- ウィンドウを閉じないで残しておくか、ダミーのウィンドウを開けておくようにする
といったものが挙げられていますが、システム側の対抗手段としては採用しにくいですね…。
IE7ではパッチがあるようですが、ホットフィックスとなっています。
私のほうでは適用しての検証を行っていません。
投稿日時 : 2008年1月9日 14:26