Agent użytkownika IE10 powoduje, że ASP.Net nie odsyła Set-Cookie (IE10 nie ustawia plików cookie)


91

Podsumowanie

ASP.Net nie odsyła Set-Cookienagłówka podczas korzystania z IE 10. Oznacza to, że na przykład nie można zalogować się do witryny ASP.Net przy użyciu IE10, na przykład podczas korzystania z uwierzytelniania za pomocą formularzy.

Szczegół

Obecnie testujemy jedną z naszych starszych aplikacji internetowych pod kątem przeglądarki IE 10 [wersja zapoznawcza 2].

Podczas próby logowania się przy użyciu uwierzytelniania za pomocą formularzy nie otrzymujemy Set-Cookienagłówka w odpowiedzi, jeśli agent użytkownika to IE 10. Próbowaliśmy tego z pustą witryną .Net 2 i .Net 4.

Ponieważ nie mogliśmy / nie uwierzyliśmy, uruchomiliśmy nawet ręcznie następujące żądanie HTTP telnet- po użyciu wszystkich zwykłych narzędzi - i otrzymaliśmy tę samą odpowiedź.

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

Powyższe żądanie HTTP zwraca nie Set-Cookiew odpowiedzi. Ale jeśli po prostu zmienimy User-Agent, aby Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/6.0)działał!

Czy ktoś może to powtórzyć? Nie mogę znaleźć żadnego znanego problemu z plikami cookie IE10 poza problemem wpływającym na niestandardowe wzorce adresów URL.

Poprawka

Po tym, jak devio opublikował oryginalną odpowiedź, z obejściem, nullptr potwierdziło, że istnieje teraz poprawka do tego .

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

Promowałem poprawkę do głównego pytania, ponieważ jest po prostu wygodniejsza do wykorzystania w przyszłości, ale prosimy o głosowanie nad wspomnianymi użytkownikami.


1
Uwaga - powyższy przykład pochodzi od nas, ustawiając plik cookie w żądaniu pobierania (za pomocą Response.SetCookie ())
isNaN1247

Inne możliwe rozwiązanie z browserCaps : stackoverflow.com/a/13474958/1191905
Anton Skovorodko

Czy stosujemy poprawkę do usług IIS lub komputera klienckiego?
Arkadyjski

@ magic-c0d3r to jest poprawka dla samego .NET, więc powinna być zastosowana na komputerze obsługującym IIS (tj. serwer WWW)
isNaN1247

3
Poprawka dla .NET 2.0 / 3.5 również może być interesująca: support.microsoft.com/kb/2600100
fortboise

Odpowiedzi:


66

Znaleziono ten wpis w MS Connect , zachowanie jest rozpoznanym błędem.

Sugerowane obejście (z wpisu):

== Obejście ==

W międzyczasie, aby to działało i aby uniknąć podobnych problemów w przyszłości, używam pliku ~ \ App_Browsers \ BrowserFile.browser z następującym:

<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
Ojej ... to trochę błąd - bardzo wątpię, że wszystkie strony ASP.Net zostaną załatane do czasu wydania IE10.
isNaN1247

2
dzięki za to. pomogło mi to w przeprowadzeniu testów zgodności z naszą aplikacją. na początku trudno było
ustalić,

Działa to dla mnie z IE10 / Win8, ale NIE IE10 / Win7. Bardzo dziwny.
ScottE

1
Dziwię się, że to działa dla niektórych osób, ponieważ nie u mnie. Zobacz odpowiedź cookieless = "UseCookies" poniżej, aby uzyskać alternatywne rozwiązanie, które moim zdaniem jest bardziej przyszłościowe i niezawodne.
mike nelson,

71

Problem tkwi w niektórych instancjach IIS myślących, że IE10 jest przeglądarką bez plików cookie (tj. Nie może obsługiwać plików cookie). W naszym przypadku problemowym serwer ustawiał plik cookie uwierzytelniający i wysyłał go z powrotem do przeglądarki, ale następnie ignorował ten plik cookie przy kolejnych żądaniach.

Rozwiązaniem jest albo poprawienie możliwości przeglądarki, aby wiedziała, że ​​IE10 może robić pliki cookie (opisane w innej odpowiedzi na tej stronie) lub zmiana domyślnego zachowania, aby zmusić ją do używania plików cookie, nawet jeśli uważa, że ​​przeglądarka nie może robić plików cookie.

Właśnie dodaliśmy do naszej sekcji formularzy w web.config:

cookieless = "UseCookies"

<authentication mode="Forms">
  <forms name=".AUTH" cookieless="UseCookies" loginUrl="/" timeout="10000" path="/" />
</authentication>

3
to rozwiązało nasz problem z IE10
Oleg Jewtejew

1
Po wypróbowaniu innych rozwiązań i poprawce odmawiającej instalacji, mówiącej, że nie jest kompatybilna z naszym serwerem, spróbowałem tego. To jedyna rzecz, która rozwiązała problem.
Brian Surowiec

Wszystko, co musiałem zrobić, to dostosować plik Web.config, aby natychmiast zobaczyć wyniki. Bravo
tuespetre

Myślę, że to jest poprawna odpowiedź. Plik cookie był ustawiany, więc wszystko wyglądało dobrze w skrzypcach, a ASP.NET był w stanie odczytać go doskonale (podczas konfigurowania strony testowej), ale Forms Auth ignorował to. Jest to poważne ograniczenie uwierzytelniania za pomocą formularzy, ale Twoja poprawka sprawia, że ​​działa tak, jak powinna!
mike nelson,

1
Jest to znacznie lepsze i możliwe do utrzymania rozwiązanie dzięki zastosowaniu poprawek IIS.
generalnetworkerror

33

Dostępna jest poprawka do tego problemu [1].

1) http://support.microsoft.com/kb/2600088
1) http://support.microsoft.com/kb/2600217 (zastępuje poprzedni KB)

Ponadto [2] sugeruje, że pojawi się to w Windows Update w styczniu 2012 roku.

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


3
Świetnie, dziękuję za to - promowałem link do głównej części pytania do wykorzystania w przyszłości.
isNaN1247

2
Potwierdzać. Na dzień dzisiejszy jest to nadal błąd (08/2012). Spróbuję poprawki.
Eric Nguyen

12
nadal błąd 04/2013 - wtf?
Scott Selby

Wciąż napotykamy ten problem, mimo że zaktualizowaliśmy poprawkę KB. Dodałem również pliki przeglądarki do pliku csproj w sieci Web. Żadne nie wydawało się pomagać. Pomogło to, że dodaliśmy „witrynę” do okna dialogowego Zaufane witryny. Teraz przekierowujemy z ramki iFrame z aplikacji Marketplace przy jednokrotnym logowaniu. Zakładam, że istnieje mniej inwazyjny sposób obsługi tego przekierowania, ale dokumentacja wydaje się ograniczona.
Paul Shriner,

3

Dziękuję za pomoc. Nie udało się.

  1. Skopiowałem plik z witryny doC:\WINDOWS\microsoft.net\Framework\v2.0.50727\CONFIG\Browsers

  2. Uruchom w wierszu polecenia C:\WINDOWS\microsoft.net\Framework\v2.0.50727>aspnet_regbrowsers.exe -i

  3. Uruchom ponownie usługi IIS.

  4. Witryna została przetestowana i działa bezbłędnie.

Jeszcze raz dziękuję za informację zwrotną


2

Aktualizacja odpowiedzi nullptr.

Próbowałem dzisiaj pobrać Microsoft KB2600088. Po otrzymaniu linku e-mailem kliknąłem go, a następnie wyprowadził mnie strona, która mówi, że nie jest już dostępna.

Spróbuj tego: http://support.microsoft.com/kb/2600217

To łącze zastępuje KB2600088 i KB2628838.

MIcrosoft .Net Framework 4.5 jest już dostępny.


Dzięki za opublikowanie tej aktualizacji. Miałem problemy z linkiem support.microsoft.com/kb/2600088 głównie dlatego, że IE na moim serwerze nie wyświetlało poprawnie strony. Twoja aktualizacja bardzo mi pomogła.
Daniel Hollinrake,

0

Zainstalowałem różne poprawki, o których wszyscy wspominali iz jakiegokolwiek powodu problem nie został rozwiązany.

Zainstalowano .NET Framework 4.5 Full i problem zniknął.

Nie musisz aktualizować żadnych projektów, aby osiągnąć cel 4.5. Po prostu zainstaluj go na serwerze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.