2011-11-28 5 views
11

Mamy wiele kopii aplikacji internetowej wdrożonej na wielu ścieżkach w tej samej domenie.
przykład:Program Internet Explorer wysyła niewłaściwy plik cookie, gdy ścieżki nakładają się na siebie.

Każdy przykład utrzymuje zestaw ciasteczek każdy określa jego path jak "/" + .getWebDirRoot() - tj /abc, /xyz, /abc123

Podczas wykonywania następujący przepływ:

Ostatni krok nie udaje się s komunikat IE wysłał nam nieprawidłowy plik cookie - wysyła go za http://mydomain.com/abc zamiast jednego za http://mydomain.com/abc123

Nie dotyczy to FireFox. (I nie próbowałem żadnej innej przeglądarki). To jest znane zachowanie IE (testowałem IE9 i IE8)?
Czy istnieje sposób na pokonanie tego problemu (w sposób programistyczny)?

Uwaga: Właśnie w celu wyjaśnienia, to nie zdarza się podczas przełączania z http://mydomain.com/abc do http://mydomain.com/xyz - zachowanie jest ściśle ograniczona do przepływów gdzie currentUrl.startswith(urlAssociatedWithCookie) == true

Sprawdziłem zachowanie używając Skrzypek - wyraźnie widać HTTP wniosek o przesłanie abc123 z wartością pliku cookie należącego do abc.

Sprawdziłem również pliki cookie w FireFox i są one zgodne z oczekiwaniami - jeden utworzony na ścieżkę.

Odpowiedz

19

Po zbadaniu przez więcej niż jeden dzień i patrząc wszędzie specyfikacji na zachowanie IE wymyśliłem nic - oprócz zrozumienia, że ​​gdy IE widzi cookie z domeny xyz i ścieżki abc, to wyśle ​​go na każde żądanie wysłane do dowolnego adresu URL zaczynającego się od tej samej domeny i ścieżki, np `http://xyz/abc123 '.

Więc w końcu to, co zrobiłem było zmienić tworzenie plików cookie, a zamiast:

Name: mycookie 
Path: /abc 

teraz utworzyć następujące:

Name: mycookie 
Path: /abc/ 

ten rozwiązał problem bez ricochetes - plik cookie jest zapisany z powodzeniem na kliencie, a poprawny plik cookie jest zawsze wysyłany na serwer.


Uwaga: Sprawdziłem RFC for HTTP Cookies i stwierdziliśmy:

Żądanie-path path-odpowiada danemu cookies ścieżkę, jeśli przynajmniej jeden z
następujące warunki posiada:

o Ścieżka pliku cookie i ścieżka żądania są identyczne.

o Ścieżka cookie jest przedrostkiem ścieżki-żądania, a ostatni znak cookie ścieżki to% x2F ("/").

o W maskowniczym ścieżka jest prefiks żądań ścieżki, a pierwsze charakter żądanie ścieżce, który nie jest zawarty w cookie- ścieżka jest% x2F („/”), znak.

Scenariusz które powinny być zastosowane tutaj jest 3, ale wygląda na to IE nie jest zgodny z RFC w tej sprawie ...

+0

Dzięki za szczegółowego dochodzenia. Wiedząc o tym zapewne zaoszczędzę wiele dramatów w przyszłości. –

+0

Stało się to samo dla mnie (i podjąłem ten sam wniosek). Dzięki za zaoszczędzenie mi czasu, aby znaleźć specyfikację i opis błędu w IE! – helios

+3

Dla wszystkich wdrażających na serwerze Apache Tomcat: Począwszy od Tomcat7 Tomcat automatycznie dodaje ukośny ukośnik ("/") do ścieżki pliku cookie, aby uniknąć tego problemu. Możesz wyłączyć tę funkcję w swoim 'context.xml', ustawiając' sessionCookiePathUsesTrailingSlash = false' (zobacz http://tomcat.apache.org/tomcat-7.0-doc/config/context.html) –

Powiązane problemy