Подтвердить что ты не робот

IE8 проигрывает файлы cookie в всплывающих окнах

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

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

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

При попытке устранить эту проблему я использовал старый добрый Fiddler. Когда проблема начинает проявляться, я заметил, что браузер не отправляет cookie сеанса идентификатора сеанса ASP.NET или файл cookie сеанса Forms Auth, даже несмотря на то, что ответ на журнал POST явно отбрасывает эти файлы cookie.

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

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

Теперь я убедился, что нет надстроек браузера, плагинов, панелей инструментов и т.д. Я добавил наш сайт в качестве надежного сайта и отключил параметры безопасности до Low, я изменил политику конфиденциальности Cookie, чтобы "принять все" и даже отключил автоматические параметры политики, вручную заставляя его принимать все и включать файлы cookie сеанса. Похоже, что это не влияет на него.

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

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

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

Update

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

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

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

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

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

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

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

4b9b3361

Ответ 1

Это "новая" функциональность в 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. Когда вы пересекаете пространство процесса, вы теряете свои файлы cookie (идентификатор сеанса Asp.Net, по-видимому, сохраняется над этой границей процесса).

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

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

связи

Марвин Смит

Ответ 2

Для этого есть несколько возможностей -

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

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 10

У меня есть аналогичная, хотя и не идентичная проблема. Мы загружаем веб-страницу, которая открывает всплывающее окно с window.open() в элемент управления браузером IE. На компьютерах, имеющих IE6 и IE8, всплывающее окно всегда назначается новым SessionID ASP при запуске из элемента управления. Однако при запуске из обычного браузера (IE или Firefox) всплывающее окно получает существующий SessionID.

Я вижу, что при запуске из элемента управления создается новый iexplore.exe процесс; таким образом, поведение потери сеанса имеет смысл, учитывая то, что было упомянуто о том, что куки in-memory не переносятся на новый процесс.

Я все еще пытаюсь найти способ обхода...

Обновление

Выяснилось работоспособное исправление! Подкласс SessionIDManager можно указать и указать, что этот класс следует использовать вместо значения по умолчанию (<sessionState sessionIDManagerType="..."> в Web.config). Подкласс может искать параметр запроса, содержащий существующий идентификатор сеанса, в переопределении CreateSessionID() и возвращать его, если он найден. Это, по существу, позволяет странице запрашивать "сливание" в существующую сессию, о которой она знает.

При вызове window.open() просто нужен этот параметр запроса, указанный в его URL-адресе.

Haw-бен

Ответ 11

Была аналогичная проблема с PHP5 и IE8. При открытии одного всплывающего окна в Javascript с помощью window.open IE8 потерял файл cookie сеанса и заставил пользователя войти в систему.

Между тем, другие всплывающие окна работали нормально.

Преступник оказался ярлыком изображения. Система шаблонов генерирует изображения src= значения динамически, а недостающее изображение приводит к тегу изображения с пустым предложением src (

Я думаю, это связано с тем, что IE интерпретирует пустой тег src как небезопасный URL-адрес и изолирует сеанс во всплывающем окне, не сообщая пользователю.

Ответ 12

У меня возникла аналогичная проблема с использованием переменных сеанса для передачи значений во всплывающем окне. Я просто закончил тем, что записывал значения в постоянный файл cookie, а затем читал куки в всплывающем окне. Это может не сработать с проблемой, с которой вы сталкивались при проверке подлинности форм, но если просто использовать переменные сеанса для передачи некоторых значений в окно в IE8, для меня, по-видимому, работали постоянные файлы cookie.

edit: см. также этот поток

Ответ 13

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