ASP.NETとセッション-新しいブラウザーインスタンスと新しいブラウザーウィンドウ
-
08-07-2019 - |
質問
誰かがこの動作を明確にし、ASP.NETが新しいセッションのようなものをいつ処理するかを決定する方法を説明できることを望んでいます。
A)Internet Explorerで、問題のASP.NETサイトを読み込みます。新しいセッションを開始します。
B)[ファイル]-[新しいウィンドウ]メニューに移動すると、同じセッション内に留まります。
C)Internet Explorerの新しいインスタンスを起動して同じページをロードすると、新しいセッションが開始されます。
ステップCで混乱しています。リモートIPに基づいて同じセッションになると予想しています。
IIS / ASP.NETは、これが新しいセッションであると判断するために何をしていますか?
IEの新しいインスタンスが使用しているリモートポートを見ていますか? File-Newで新しいウィンドウを起動すると、親と同じリモートポートが使用されます。
解決
IIS / ASP.NETのセッションは、セッションスコープのCookieに基づいています。つまり、ブラウザーを閉じたときに破棄され、明らかにInternet Explorerの異なるプロセス内で共有されません。
[ファイル]で新しいブラウザウィンドウを開いたとき>新しいウィンドウウィンドウは、最初と同じプロセス(つまり、同じiexplorer.exe)によって処理されます。スタートメニューからIEを起動すると、新しいプロセスが取得され、タスクマネージャーに2つのiexplorer.exeが作成されます。複数のプロセスを生成するのはIE 7だけだと思います。
補足として、IE 8には、Google Chromeのように、タブ/ウィンドウごとに1つのプロセスがあります。これらのブラウザーがプロセス間でセッションCookieを共有するかどうかはわかりませんが、これらのブラウザーのいずれかを使用してテストする場合は、必ず覚えておく必要があります。
他のヒント
デフォルトでは、ASP.NETはCookieを介してセッションを追跡します。新しいIEインスタンスにはセッションCookieがないため、新しいセッションが作成されます。ただし、ファイルを使用する->既存のIEウィンドウからの新しいウィンドウは、「親」と同じCookieを持つ新しいウィンドウを作成し、ASP.NETが既存のセッションを使用できるようにします。
新しいIEインスタンスは、ケースBで発生するものと同じCookieを持っているのだろうか、それは新しいウィンドウではあるが同じプロセスを使用しているのだろうか。セッションをさまざまなクライアントにマップするために使用される値は、通常、Cookieまたはクエリ文字列にあります。
セッションデータがプロセスごとにキャッシュされているようです。 A)とB)は同じプロセスに存在しますが、IEの新しいインスタンスを起動すると新しいプロセスが作成されます。