ASP.NET и сеансы — новый экземпляр браузера и новое окно браузера

Я надеюсь, что кто-нибудь сможет разъяснить мне это поведение и объяснить, как ASP.NET решает, когда рассматривать что-то вроде нового сеанса.

A) В Internet Explorer я загружаю рассматриваемый сайт ASP.NET. Он запускает новый сеанс.
B) Если я захожу в меню "Файл" - "Новое окно"... он остается в том же сеансе.
C) Если я запускаю новый экземпляр Internet Explorer и загружаю ту же страницу, он запускает новую сессию.

Меня смущает шаг C. Я ожидаю, что это будет тот же сеанс на основе моего удаленного IP-адреса.
Что делает IIS/ASP.NET, чтобы решить, что это новый сеанс? Он смотрит на мой удаленный порт, который использует новый экземпляр IE? Когда вы запускаете новое окно с помощью File - New, оно использует тот же удаленный порт, что и родитель.


person BuddyJoe    schedule 19.11.2008    source источник


Ответы (4)


Сеансы в IIS/ASP.NET основаны на файлах cookie с областью сеанса, что означает, что они уничтожаются при закрытии браузера и, по-видимому, не используются в разных процессах Internet Explorer.

Когда вы открываете новое окно браузера с помощью команды «Файл» > «Новое окно», окно будет обрабатываться тем же процессом, что и первое (то есть тем же iexplorer.exe). Когда вы запускаете IE из меню «Пуск», вы получаете новый процесс, и теперь у вас будет два файла iexplorer.exe в диспетчере задач. Я думаю, что только IE 7 будет порождать несколько процессов.

В качестве примечания: в IE 8 будет один процесс на вкладку/окно, как в Google Chrome. Я не знаю, разделяют ли эти браузеры файлы cookie сеанса между процессами, но об этом, безусловно, следует помнить при тестировании с использованием одного из этих браузеров.

person Jan Aagaard    schedule 20.11.2008
comment
IE6 тоже это сделал. Насчет 5 не уверен. - person GalacticCowboy; 20.11.2008
comment
IE8 разделяет сеансы между вкладками и окнами, если вы не используете параметр «Новый сеанс» в меню «Файл». Это привело к сбоям в работе некоторых наших сайтов, когда пользователи перешли на IE 8. - person Rozwel; 13.03.2012

По умолчанию ASP.NET отслеживает сеансы с помощью файлов cookie. Новый экземпляр IE не имеет файла cookie сеанса, что приводит к созданию нового сеанса. Однако использование File -> New Window из существующего окна IE создаст новое окно с теми же файлами cookie, что и «родительский», что позволит ASP.NET использовать существующий сеанс.

person J c    schedule 20.11.2008
comment
Я также должен отметить, что IIS и ASP.NET на самом деле не имеют ничего общего с разницей в поведении, которую вы замечаете. Кроме того, имейте в виду, что сеансы не зависят от удаленного IP-адреса, который часто одинаков для многих пользователей (например, прокси). - person J c; 20.11.2008
comment
Вы совершенно правы насчет удаленного IP... надо было подумать об этом. Является ли файл cookie сеанса (по сравнению с обычным файлом cookie) частью спецификации HTML? - person BuddyJoe; 20.11.2008
comment
Я не верю, что это часть спецификации, файл cookie сеанса на самом деле ничем не отличается от любого другого файла cookie, за исключением того, что его значение содержит уникальный идентификатор, который также известен ASP.NET. Однако этот файл cookie обычно передается как заголовок HTTP в соответствии со спецификацией HTTP. - person J c; 20.11.2008
comment
Обратите внимание, что когда файлы cookie отключены, сеанс можно поддерживать, используя параметр GET/POST для передачи ключа сеанса. Сервер встраивает это как скрытое поле в форму или, альтернативно, как часть URL-адреса, что заставляет браузер включать ключ в следующий запрос. - person J c; 20.11.2008
comment
Если вы хотите увидеть, что происходит под капотом, проверьте ieHTTPHeaders, который установит в IE элемент View->Explorer Bar-, который позволит вам наблюдать за трафиком заголовков HTTP. Например, в сценарии B вы можете увидеть, как браузер с самого начала передает файл cookie сеанса на сервер. - person J c; 20.11.2008

Интересно, будут ли у нового экземпляра IE те же файлы cookie, что и в случае B, где, хотя это новое окно, он использует тот же процесс. Обычно в файле cookie или в строке запроса содержится значение, используемое для сопоставления сеансов с различными клиентами.

person JB King    schedule 19.11.2008

Может показаться, что данные сеанса кэшируются для каждого процесса. A) и B) существуют в одном и том же процессе, тогда как запуск нового экземпляра IE будет создавать новый процесс.

person JamesSugrue    schedule 20.11.2008