2008-11-19 4 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 сеанса, в результате чего создается новый сеанс. Однако, используя File -> New Window из существующего окна 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 будет создавать новый процесс.