Пользовательский агент IE10 заставляет ASP.Net не отправлять обратно Set-Cookie (IE10 не устанавливает файлы cookie)

91

Резюме

ASP.Net не отправляет обратно Set-Cookieзаголовок при использовании IE 10. Это означает, что, например, вы не можете войти на сайт ASP.Net с помощью IE10, например, при использовании проверки подлинности с помощью форм.

Деталь

В настоящее время мы тестируем одно из наших старых веб-приложений на соответствие IE 10 [Preview 2].

При попытке входа в систему с использованием проверки подлинности с помощью форм мы не получаем Set-Cookieзаголовок в ответе, если пользовательский агент является агентом IE 10. Мы пробовали это с пустым сайтом .Net 2 и .Net 4.

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

GET http://test.ourdomain.co.uk/ HTTP/1.1
Accept: */*
Host: test.ourdomain.co.uk
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)
Content-Length: 0

Вышеупомянутый HTTP-запрос Set-Cookieв ответе не возвращает . Но если мы просто изменим User-Agent, Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/6.0)он заработает!

Может ли кто-нибудь еще повторить это? Я не могу найти никаких известных проблем с файлами cookie IE10, кроме проблемы, которая влияет на нестандартные шаблоны URL.

Исправление

После devio опубликовал оригинальный ответ, с обходным путем, nullptr есть подтвердить , что есть теперь исправление для этого .

http://support.microsoft.com/kb/2600088

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

isNaN1247
источник
1
Примечание. В приведенном выше примере мы установили файл cookie для запроса на получение (с использованием Response.SetCookie ())
isNaN1247,
Другое возможное решение с browserCaps : stackoverflow.com/a/13474958/1191905
Антон Сковородко
Применяем ли мы оперативное исправление к IIS или клиентскому компьютеру?
Arcadian
@ magic-c0d3r, это исправление для самой .NET, поэтому его следует применить к машине, на которой размещен IIS (т.е. веб-сервер)
isNaN1247
3
Исправление для .NET 2.0 / 3.5 также может быть интересно: support.microsoft.com/kb/2600100
fortboise

Ответы:

66

Нашел эту запись в MS Connect , поведение - распознанная ошибка.

Предлагаемый способ обхода (из записи):

== Обходной путь ==

А пока, чтобы заставить его работать и избежать подобных проблем в будущем, я использую файл ~ \ App_Browsers \ BrowserFile.browser со следующим:

<browsers>
<browser refID="Default">
<capabilities><!-- To avoid wrong detections of e.g. IE10 -->
<capability name="cookies" value="true" />
<capability name="ecmascriptversion" value="3.0" />
</capabilities>
</browser>
</browsers>
девио
источник
7
О боже ... это небольшая ошибка - я очень сомневаюсь, что все сайты ASP.Net будут исправлены к моменту выпуска IE10.
isNaN1247
2
Спасибо за это. это помогло мне начать тестирование совместимости с нашим приложением. Сначала было трудно понять, наше приложение это или бета-версия, но обходной путь сделал нас продуктивными
MikeJ
У меня это работает с IE10 / Win8, но НЕ с IE10 / Win7. Очень странно.
ScottE
1
Я удивлен, что это работает для некоторых людей, потому что это не для меня. См. Ответ cookieless = "UseCookies" ниже, чтобы узнать об альтернативном решении, которое, на мой взгляд, более надежно и надежно в будущем.
Майк Нельсон
71

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

Решение состоит в том, чтобы либо исправить возможности браузера, чтобы он знал, что IE10 может использовать файлы cookie (это описано в другом ответе на этой странице), либо изменить поведение по умолчанию, чтобы заставить его использовать файлы cookie, даже если он считает, что браузер не может использовать файлы cookie.

Мы только что добавили в наш раздел форм в web.config следующее:

cookieless = "UseCookies"

<authentication mode="Forms">
  <forms name=".AUTH" cookieless="UseCookies" loginUrl="/" timeout="10000" path="/" />
</authentication>
Дэйв Самтер
источник
3
которая
устранила
1
После того, как я попробовал другие решения и исправление отказалось устанавливать, заявив, что оно несовместимо с нашим сервером, я попробовал это. Это единственное, что помогло нам решить проблему.
Брайан Суровец
Все, что мне нужно было сделать, это настроить Web.config, чтобы увидеть немедленные результаты. Bravo
tuespetre
Думаю, это правильный ответ. Файл cookie был установлен, поэтому все выглядело нормально в скрипте, и ASP.NET смог прочитать его отлично (когда я настраивал тестовую страницу), но Forms Auth игнорировал его. Это серьезное ограничение для Forms Auth, но ваше исправление заставляет его работать так, как всегда!
Майк Нельсон
1
Это гораздо лучшее и надежное решение от исправления IIS.
generalnetworkerror
33

Для этой проблемы доступно исправление [1].

1) http://support.microsoft.com/kb/2600088
1) http://support.microsoft.com/kb/2600217 (заменяет предыдущий KB)

Также [2] предполагает, что это появится в Центре обновления Windows в январе 2012 года.

2) http://www.hanselman.com/blog/BugAndFixASPNETFailsToDetectIE10CausingDoPostBackIsUndefinedJavaScriptErrorOrMaintainFF5ScrollbarPosition.aspx

Дерек Слэджер
источник
3
Отлично, спасибо за это - я разместил ссылку на основную часть вопроса для дальнейшего использования.
isNaN1247
2
Подтвердите. На данный момент (08/2012) это все еще ошибка. Попробую исправление.
Эрик Нгуен
12
все еще ошибка 04/2013 - wtf?
Скотт Селби
Мы все еще сталкиваемся с этой проблемой, несмотря на то, что обновили KB Hotfix. Я также добавил файлы браузера в Web csproj. Ни то, ни другое не помогло. Что действительно помогло, так это то, что мы добавили «сайт» в диалоговое окно «Надежные сайты». Теперь мы перенаправляем IFrame из приложения Marketplace при едином входе. Я предполагаю, что существует менее инвазивный способ обработки этого перенаправления, но документация по этому вопросу кажется ограниченной.
Пол Шрайнер
3

Спасибо за помощь. Это не сработало.

  1. Скопировал файл с сайта наC:\WINDOWS\microsoft.net\Framework\v2.0.50727\CONFIG\Browsers

  2. Запустить в командной строке C:\WINDOWS\microsoft.net\Framework\v2.0.50727>aspnet_regbrowsers.exe -i

  3. Перезагрузите IIS.

  4. Протестировал сайт, работает без ошибок.

Еще раз спасибо за обратную связь

user2191793
источник
2

Обновление для ответа nullptr.

Я попробовал сегодня скачать Microsoft KB2600088. Получив ссылку по электронной почте, я щелкнул по ней, и она привела меня на страницу, где говорится, что она больше не доступна.

Попробуйте это: http://support.microsoft.com/kb/2600217

Эта ссылка заменяет KB2600088 и KB2628838.

MIcrosoft .Net Framework 4.5 также доступен сейчас.

Оски
источник
Спасибо, что разместили это обновление. У меня возникли проблемы с этой ссылкой support.microsoft.com/kb/2600088 в основном потому, что IE на моем сервере не отображал страницу должным образом. Ваше обновление мне очень помогло.
Дэниел Холлинрейк
0

Установлены различные патчи, о которых все упоминают, и по какой-то причине проблема не была решена.

Установил .NET Framework 4.5 Full, и проблема исчезла.

Вам не нужно обновлять проекты до версии 4.5. Просто установите его на сервер.

Нейт Кук
источник