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.