前へ[ 穴子ラーメン@駄菓子屋 ]
[ IE8その2 ]
次へ 
正直自分メモ。
IE8がWindowsUpdateで配布され利用者も増えているようですが、PCサイトを運用している立場で困ったデフォルト挙動の変更がありました。
その1:セッションクッキーが全IE窓で共有される
デフォルトで、そのマシンであるユーザが起動したIE8の全てでセッションクッキーがリアルタイムに共有されます。
例えばYahoo等(i-revoもそうですが)でログインを行なうと、ブラウザのセッションクッキーを使ってログイン情報が保持されます。
今まで、新規にIEを上げる(スタートボタンからIEを選んで起動しなおす)と、そのIEではそれまで起動されているIEと別空間のクッキー情報となり、このブラウザでYahooを開けば非ログイン状態で開きます。
ところがIE8ではセッションクッキーが共有されて、もう1つのIEでログインしたユーザーにてログイン済みとなって開きます。
ある意味便利ですが、複数IDを同時に使い分けるようなことは出来なくなります。
また以前の挙動と同じと思っていると、非ログインのつもりで開いたページでもログイン済みで「あしあと」が残ったりします。
この「セッションクッキーが共有」はIE8がプログラム実行方法的にIE7以前と大きく変わったところが影響しています。
IEが起動された後、そのIEで「新規ウインドウ」を開く場合、またポップアップウインドウとか、リンクをクリックしたときに別ウインドウで開く場合には、同一のプログラムイメージが複数のウインドウを出していました。
これがIE8だと、起動時にまず「管理用」のイメージが動き、ここから「表示用」のIEが起動されます。
新規ウインドウを開いたり、新規タブを開くたびに「表示用」のIEが呼び出されます。
見た目に確認しやすいところですと、タスクマネージャーを開いて、「プロセス」タブで「iexplore.exe」の数を数えてください。
IE7以前の場合、新規にIEを起動するとiexplore.exeが1つ起動します。その後いくらウインドウを開こうとも、iexplore.exeは1つのままです。
IE8では新規にIEを起動すると、いきなり2つのiexplore.exeが出てきます。その後、ウインドウを開くたびにiexplore.exeが増えていきます。
IE8方式だと、プログラムを高速に実行できるので、これまでより実行速度が大きく向上した、といっているMSの話も頷けます。
が、この方式はメモリ資源が有り余る場合はいいのですが、ちょっと古いノートPCとかでメモリの制約が大きい場合にはちょっと厳しいですね。
で話は戻って、これまでは1つのプログラムイメージ内で当たり前にクッキー(特にメモリ上にしか残さないセッションクッキー)が共有されていたものが、IE8では前提としてバラバラのメモリ空間で実行されるイメージのためにこれまでとは違う形での共有方法が必要になってきます。
そうしないと、例えば「ログイン」ボタンを押した瞬間に新規ウインドウが開いてユーザーページを出す構造のサイトの場合に永久にログインが出来なくなってしまいます。
おそらくここで「管理用」のiexplore.exeが仲介していると思われますが、別空間のIE同士でセッションクッキーを共有できる仕組みが必要になり実装された形です。
ところが、今度は敢えて新規IEを立ち上げて違うセッションクッキーで利用したいのに共有されてしまう問題が出てきています。
これがIE8でのデフォルト挙動です。
IE7以前のように出来ないか調べたところ、レジストリを直接操作することでセッションクッキーが共有されなくなる方法がありました。
具体的には
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main
のキーにDWORD値を2つ設定します。元からある場合は変更して下さい。
FrameMerging ⇒0
SessionMerging ⇒0
それぞれ、「1」が規定値です。
これによりIEを新規で立ち上げた場合にセッションクッキーが共有されなくなります。
また、起動中のIEからクリックにより新規ウインドウが開かれたりした場合にはちゃんとセッションが維持されます。
ただし、想定外の場所でセッションが切れてしまうことも考えられるので、同一サイトで別IDを同時に利用したいとか、明確な目的があって困っている場合のみ設定したほうが良いと思います。