ひよっこ。

I want to…

PopUpウィンドウを閉じた後に、セッションCookieが喪失してしまう件

Posted by hikaruworld : 2008 11月 12

この辺りが詳しい

原因

この問題は、セッションカウントが正しく維持されないため、子ウィンドウを閉じた時にセッションカウントが 0 になり、
Internet Explorer 内部で保持しているセッション情報が削除されるために発生します。

※ セッション cookie は本来、Internet Explorer のプロセスごとに値が引き継がれます。セッション cookie を受け取ったInternet Explorer のプロセスを終了すると、セッション cookie は失われ、ハードディスクからも削除されます。

補足説明

IE5.5、IE6、IE7で、この現象が発生しているようだ。
IE5.5及びIE6におけるこの障害に関しては、IE6 SPで修正が行われている。
が、IE7では再び再発しており、WindowsのOSバージョンによって対応が異なるらしい。

※ Vistaに関してはSP1でfixされていますがXPではSP3でも修正されておらず、この障害はHotfix扱いのため完全に回避するためには自力でパッチをあてる必要がある。

Microsoftサポートからアナウンスされている回避策

以下の条件をすべて満たす場合、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. IEを起動
  2. セッションCookieを確立
  3. 該当画面へ遷移。
  4. PopUpせずに次の画面に遷移(この際にセッション情報を確認している)

発生するケース

  1. IEを起動
  2. セッションCookieを確立
  3. 該当画面へ遷移。
  4. PopUp画面を表示。
  5. PopUp画面を閉じる。
  6. 次の画面へ遷移(この際にセッション情報を確認している)←★発生する。

回避方法

WindowsVistaを使用している場合は、SP1を適用することで回避可能。

XPの場合は、Microsoftサポートからは以下のようにアナウンスされている。

・cookie に有効期限を設定する
・HTML ファイルをローカルに置かせずに HTTP サーバー上に置く
・ウィンドウを閉じないで残しておくか、ダミーのウィンドウを開けておくようにする

現状対応しうる、回避方法としては以下の方法が適切か。

ウィンドウを閉じないで残しておくか、ダミーのウィンドウを開けておくようにする

関連リンク

このIEのバグ、昔一度引っかかっていたんだけど、IE5.5、IE6だと既に修正されていたこと、IE7だったことで、
すぐに気がつかずにはまってしまった。
まさかIE7でも再発してるとは。。。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。