У нас есть приложение 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, чтобы найти постоянное исправление.