IE8 теряет сеансовые куки во всплывающих окнах - PullRequest
35 голосов
/ 24 августа 2009

У нас есть приложение ASP.NET, которое использует Forms Auth. Когда пользователи входят в систему, генерируются файл cookie с идентификатором сеанса и билет проверки подлинности форм (сохраняются в виде файла cookie). Это сеансовые куки, а не постоянные куки. Это преднамеренно и желательно, чтобы, когда браузер закрывался, пользователь эффективно выходил из системы.

Как только пользователь входит в систему, открывается новое окно с помощью window.open('location here');. Открываемая страница фактически является рабочим пространством, в котором пользователь работает в течение оставшейся части сеанса. На этой странице также используются другие всплывающие окна.

В последнее время у нас было несколько клиентов (все использовали последние версии IE8), которые жаловались на то, что при входе в систему первоначальное всплывающее окно возвращает их на экран входа, а не на их домашнюю страницу. Альтернативно, пользователи могут иногда входить в систему, переходить на домашнюю страницу (которая снова находится в новом всплывающем окне), и все это выглядит нормально, пока не будут созданы какие-либо дополнительные всплывающие окна, где он начнет перенаправлять их на экран входа в систему. еще раз.

При попытке решить проблему я использовал старый добрый Fiddler. Когда проблема начинает проявляться, я заметил, что браузер не отправляет cookie-файл сеанса с идентификатором ASP.NET ИЛИ cookie-файл сеанса билета Autms, хотя ответ на вход в систему POST явно сбрасывает эти cookie.

Что еще более странно, если я нажму CTRL + N, чтобы открыть новое окно из всплывающего окна, в котором отсутствуют файлы cookie сеанса, а затем вручную введите URL-адрес домашней страницы, эти файлы волшебным образом появятся снова. Однако последующие вызовы window.open(); будут по-прежнему прерываться, не отправляя файлы cookie сеанса и не выводя пользователя на экран входа.

Важно отметить, что иногда, по-видимому, без веской причины, те же пользователи могут внезапно войти в систему и некоторое время нормально работать, а затем все возвращается в нерабочее состояние.

Теперь я убедился, что в браузере не работают надстройки, плагины, панели инструментов и т. Д. Я добавил наш сайт в качестве надежного сайта и сбросил параметры безопасности на Низкий, изменил политику конфиденциальности файлов cookie, чтобы «принимать все», и даже отключил автоматические параметры политики, заставив его вручную принимать все и включать сеансовые файлы cookie. Ничто не влияет на это.

Также обратите внимание, что веб-приложение находится на одном сервере. Балансировка нагрузки отсутствует, веб-сады, фермы серверов, кластеры и т. Д. Сервер находится за ISA-сервером, но в остальном он довольно прост.

Я искал несколько дней и не нашел ничего действенного. Черт, иногда я даже не могу воспроизвести это надежно. Я нашел несколько ссылок на людей, имеющих такую ​​же проблему, но они, похоже, ссылаются на проблему, которая, как утверждается, была исправлена ​​в бета-версии или выпуске RC (пример: IE8 теряет куки при открытии нового окна после перенаправления ). Это релизные версии IE с последними исправлениями.

Мне известно, что я могу попытаться установить постоянные куки вместо сеансовых куки. Однако это имеет серьезные последствия для безопасности нашего приложения.

Обновление

Кажется, что проблема автоматически исчезает, когда пользователь добавляется в систему в качестве локального администратора. Только время покажет, повлияет ли это изменение навсегда (и положительно) на эту проблему.

Время запустить ProcMon и посмотреть, есть ли проблема с доступом к ресурсам.

Обновление № 2

Кажется, существует множество точек зрения на то, что кажется особой проблемой. Я давно сообщал, что создание пользователя локальным администратором, похоже, помогло. И это было сделано для ряда пользователей. Конечно, это не совсем решение, но оно позволило нам сойти с ума.

Тогда больше пользователей начали сообщать о проблеме, и исправление администратора не помогало. Пользователи, похоже, были в основном Win7, но Vista тоже пострадала. Они также казались в основном 64-битными установками.

Установка TabProcGrowth в 0 или 1 (либо сработало), как предложили некоторые члены ниже, похоже, в значительной степени решает проблему. Итак, я собираюсь переместить мой принятый ответ первому человеку, который предложил это, поскольку он оказал значительно большее влияние.

Это была невероятно неприятная проблема, которую я пытался решить, поскольку ее трудно воспроизвести, и часто это происходит с пользователями, с которыми у меня нет прямой связи, или к тому времени, когда я к ним обращаюсь, это, кажется, за работой. Все, что я могу сказать, это что-то не так с функцией слияния сессий, но у меня нет много данных, чтобы отправить их в Microsoft, чтобы найти постоянное исправление.

Ответы [ 13 ]

16 голосов
/ 15 сентября 2009

Это «новая» функциональность в IE8!

Посетите блог IE8 ниже, чтобы прочитать об этом.

http://blogs.msdn.com/askie/archive/2009/03/09/opening-a-new-tab-may-launch-a-new-process-with-internet-explorer-8-0.aspx

IE8 может использовать несколько процессов для обработки x числа окон IE. Когда вы пересекаете пространство процесса, вы теряете куки (кажется, что идентификатор сеанса Asp.Net сохраняется за пределами этого процесса).

Я лично думаю, что это сломано или ошибка. Как мы знаем, при просмотре файлов «целевой домен» куки должны сохраняться и повторно отправляться. Это IE8 имеет другое поведение обработки для безопасности .. Отлично! что он ведет себя плохо и «сбрасывает куки, даже если идет в тот же целевой домен в другом окне», на мой взгляд, это просто ошибка.

Вы можете изменить количество процессов, которые IE8 использует, через опции Internet Explorer. Эхх .. изменение настроек реестра !!!!!! (это то, что делает это ошибкой, на мой взгляд. IE, предоставляющий пользовательский интерфейс для изменения этих настроек, сделал бы его «приемлемым для предприятия».

Regard

Марвин Смит

6 голосов
/ 25 августа 2009

За этим стоит несколько возможностей -

  • UAC & Vista (пришлось всплывать !!). В частности, обратите внимание на поведение защищенного режима.
  • Это может быть реальной проблемой с функцией Session Merging в IE8 . Более того, поскольку открытие нового окна с помощью комбинации клавиш Ctrl + N приводит к магической отправке файлов cookie в вашем случае.
  • Проблема со старой версией IE (я знаю, что вы заявили, что ваши клиенты используют последнюю сборку). Возможно, вы захотите проверить информацию, доступную в Microsoft Connect, для идентификаторов ошибок 408806 и 392032 .
3 голосов
/ 19 мая 2010

Мы решили эту проблему, изменив «Установить процесс роста вкладок» на 0.

Хотя у нас не был включен защищенный режим, и зона была "Интранет". Очевидно, что это проблема / ошибка в Windows 7 64Bit, как утверждают другие.

Эта страница (# 4) приводит меня к решению: http://blog.httpwatch.com/2009/04/07/seven-things-you-should-known-about-ie-8/

2 голосов
/ 18 ноября 2013

Насколько я могу судить, в этом обновлении для системы безопасности от 12 ноября 2013 г. появилось еще одно изменение файлов cookie на всех вкладках, которое нарушает функциональность нашего приложения во всех версиях IE. Мы выполняем аутентификацию OpenID во всплывающем окне, чтобы не перенаправлять пользователя со страницы, которую он просматривал, когда он впервые щелкнул ссылку «Вход». Сеансовый cookie-файл для входа в систему корректно отправляется в запросе во всплывающем окне, но он никогда не будет виден в главном окне браузера, поэтому при следующем запросе к серверу этот сеансовый cookie-файл не будет помещен так, как должен, и, следовательно, вход никогда не работает.

Кто-нибудь имеет какие-либо возможные решения для этого?

1 голос
/ 15 ноября 2013

Я считаю, что это на самом деле ошибка в IE; Я сообщил об этом здесь, чтобы увидеть, какие отзывы я получаю: http://social.msdn.microsoft.com/Forums/en-US/83bb3b91-1c1f-4d51-9281-9bc5f51d3640/log-in-fails-cookie-is-not-sent-to-originating-tab?forum=iewebdevelopment

1 голос
/ 30 ноября 2010

Я также нашел исправление для этой проблемы. Кажется, есть проблема с тем, как IE8 обрабатывает открытие сервлетов в другом окне с относительным путем, таким как / test. Кажется, он открывает новую сессию и новое окно. Наше работоспособное исправление заключается в том, что вместо открытия нового окна с относительным путем мы просто использовали страницу jsp. Поэтому, когда мы переходим к URL-адресу, мы больше не переходим к / тестируем. Мы переходим к определенному файлу. В файле jsp мы перенаправляем запрос на относительный путь. Кажется, это работает, что немного неловко, поскольку единственное отличие состоит в том, что мы помещаем определенный файл между ними.

Надеюсь, это поможет.

1 голос
/ 01 марта 2010

Начиная с IE8, мы (и наши клиенты) также испытываем ту же проблему. У нас есть сервис asp для создания форм. Это приложение использует новые окна для добавления элементов или управления учетными записями пользователей, например. Случайно (при открытии нового окна) приложение не получает требуемый идентификатор сеанса для аутентификации вместе с другими «постоянными» cookie-файлами. Следовательно, идентификатор сеанса является временным cookie. В большинстве случаев все идет хорошо, но иногда сеанс прерывается каждый раз, когда открывается новое окно. Мы должны посоветовать нашим клиентам закрыть все окна IE и начать все сначала.

Как веб-разработчик, я широко использую IE. Лично я не испытываю вышеуказанную проблему. Но я думаю, что связанный. Несколько раз в день IE полностью зависает (больше не отвечает) при открытии нового окна. Когда я убиваю определенный процесс IE, используя диспетчер задач, IE начинает отвечать снова. Но в большинстве случаев лучше начинать все сначала с чистого нового экземпляра IE. По этой причине я просто убиваю процесс с наименьшим использованием памяти, что приводит к завершению всех процессов IE.

Microsoft, утверждающая, что эти проблемы / ошибки устранены в окончательной версии, не дает мне уверенности в том, что их усилия по решению проблемы все еще будут иметь место.

1 голос
/ 25 февраля 2010

У нас была эта проблема в IE6,7 и 8. Сценарий родительского окна (1) открывает модальное окно (2), модальное окно имеет ссылку на немодальное окно (3). Я использовал, чтобы получить другой идентификатор сессии в 3-м окне.

Упомянутый здесь обходной путь исправил проблему http://support.microsoft.com/kb/831678

1 голос
/ 03 сентября 2009

Я знаю эту проблему начиная с IE 5, поэтому я использую переменные сессии только в модальных всплывающих окнах ... Когда я открываю немодальное всплывающее окно, я заменяю все переменные сессии кэшем ASP.NET и новыми коллекциями объектов ... Но это очень утомительно!

Другие браузеры (например, Firefox) не имеют этой проблемы ...

0 голосов
/ 20 июня 2015

Вы также можете использовать метод LocalStoprage для сброса значения в родительском окне. localStorage ("Key") = "Value"; // Javascript

...