2008-11-19 119 views
6

我希望有人可以爲我澄清這種行爲,並解釋ASP.NET如何決定何時處理像新的會話。ASP.NET和會話 - 新的瀏覽器實例與新的瀏覽器窗口

A)在Internet Explorer中,我加載了有問題的ASP.NET網站。它開始一個新的會話。 B)如果我進入菜單文件 - 新窗口...它保持在同一個會話中。
C)如果我啓動一個新的Internet Explorer實例並加載相同的頁面,它將啓動一個新的會話。

我很困惑的步驟C.我期待它是基於我的遠程IP相同的會話。
什麼是IIS/ASP.NET做決定,這是一個新的會話? 它看着我的遠程端口,IE的新實例正在使用?當你用File - New打開一個新窗口時,它使用與父窗口相同的遠程端口。

回答

13

IIS/ASP.NET中的會話基於具有會話範圍的cookie,這意味着它們在瀏覽器關閉時被破壞,顯然它們不在Internet Explorer的不同進程中共享。

當您使用文件>新窗口打開一個新的瀏覽器窗口時,窗口將通過與第一個窗口相同的進程(即相同的iexplorer.exe)進行處理。當你從開始菜單啓動IE時,你會得到一個新的進程,你現在將在任務管理器中有兩個iexplorer.exe。我認爲只有IE 7會產生多個進程。

作爲一個方面說明,IE 8每個標籤頁/窗口都會有一個進程,就像Google Chrome一樣。我不知道這些瀏覽器是否在這些進程之間共享會話cookie,但在使用這些瀏覽器進行測試時確實需要記住這些。

0

我不知道如果新的IE實例會有相同的cookie發生在情況B,而它是一個新的窗口,它使用相同的過程。它通常在cookie中或查詢字符串中有一個用於將會話映射到各種客戶端的值。

4

默認情況下,ASP.NET通過cookie跟蹤會話。新的IE實例沒有會話cookie,導致新的會話。但是,從現有的IE窗口使用文件 - >新窗口將創建一個與「父」相同的cookie的新窗口,從而允許ASP.NET使用現有的會話。

+1

我還應該注意到IIS和ASP.NET並沒有真正有關你在注意行爲上的差異。另外,請記住,會話不依賴遠程IP地址,而這對於許多用戶(即代理)來說通常是相同的。 – 2008-11-20 00:10:44

+0

您對遠程IP的完全正確...應該想到這一點。會話cookie(與常規cookie)是HTML規範的一部分嗎? – BuddyJoe 2008-11-20 13:01:09

0

會出現會話數據正在緩存每個進程。 A)和B)存在於相同的過程中,而啓動IE的新實例將創建一個新過程。