IE10 User-Agent змушує ASP.Net не надсилати Set-Cookie (IE10 не встановлює cookie-файли)


91

Резюме

ASP.Net не надсилає назад Set-Cookieзаголовок під час використання IE 10. Це означає, що, наприклад, ви не можете ввійти на сайт ASP.Net за допомогою IE10, наприклад, використовуючи автентифікацію форм.

Деталь

В даний час ми тестуємо один із наших застарілих веб-додатків щодо IE 10 [Попередній перегляд 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

Я висунув виправлення до основного питання, оскільки це просто зручніше для подальшого використання, але, будь ласка, проголосуйте за тих, кого згадали користувачі.


1
Примітка - наведений вище приклад був від нас, встановивши cookie на запит на отримання (за допомогою Response.SetCookie ())
isNaN1247

Іншим можливим рішенням з browserCaps : stackoverflow.com/a/13474958/1191905
Антон сковорідку

Чи застосовуємо ми виправлення до IIS або клієнтської машини?
Аркадіан

@ 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" нижче для альтернативного рішення, яке, на мою думку, є більш надійним і надійним у майбутньому.
mike nelson

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
що вирішило нашу проблему з IE10
Олег Євтєєв

1
Спробувавши інші рішення, і виправлення відмовившись встановити, сказавши, що воно не сумісне з нашим сервером, я спробував це. Це єдине, що вирішило проблему для нас.
Брайан Суровець,

Мені потрібно було лише налаштувати Web.config, щоб побачити негайні результати. Bravo
tuespetre

Думаю, це правильна відповідь. Файл cookie встановлювався, тож у скрипці все виглядало нормально, і ASP.NET зміг зчитати його абсолютно чудово (коли я налаштував тестову сторінку), але Forms Auth ігнорував його. Це серйозне обмеження Forms Auth, але ваше виправлення змушує його працювати як завжди!
mike nelson

1
Це набагато краще і стійке рішення від виправлення IIS.
generalnetworkerror

33

Для цього випуску доступне виправлення [1].

1) http://support.microsoft.com/kb/2600088
1) http://support.microsoft.com/kb/2600217 (замінює попередній КБ)

Крім того, [2] припускає, що це з’явиться у Windows Update у січні 2012 року.

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


3
Блискуче, дякую за це - я просунув посилання на основну частину питання для подальшого використання.
isNaN1247

2
Підтвердьте. Наразі це помилка (08/2012). Я спробую виправлення.
Eric Nguyen

12
все ще помилка 04/2013 - wtf?
Скотт Селбі,

Ми все ще вирішуємо цю проблему, хоча ми оновили виправлення KB. Я також додав файли браузера до веб-csproj. Здавалося, ні ті, ні інші не допомогли. Що допомогло, так це те, що ми додали "сайт" до діалогового вікна "Довірені сайти". Зараз ми переспрямовуємо IFrame з програми Marketplace на єдиний вхід. Я припускаю, що існує менш інвазивний спосіб обробки цього перенаправлення, але документація, здається, обмежена з цього приводу.
Paul Shriner

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. Перевірено сайт, і він працює без помилок.

Ще раз спасибі за відгук


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. Просто встановіть його на сервер.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.