2016-08-18 31 views
11

Z jakiegoś powodu moja przeglądarka (próbowałem kilku) nie ustawi plików cookie, mimo że serwer zgłasza prawidłową odpowiedź zestawu plików cookie podczas wywołania GET za pośrednictwem interfejsu Ajax przy użyciu api fetch, aby przesłać żądanie:Dlaczego w przeglądarce jest ignorowany nagłówek zestawu plików cookie, a pliki cookie nie są zapisywane z połączenia Ajax za pomocą pobierania?

Jeśli wykonam identyczne wywołanie GET po prostu poprzez umieszczenie adresu URL w przeglądarce, (takie same) nagłówki odpowiedzi zestawu plików cookie są przestrzegane przez przeglądarkę, a pliki cookie są zapisywane.

Sprawdziłem nagłówki żądań i odpowiedzi za pośrednictwem usługi LiveHeaders i inspektora sieci Chrome. Nie ma różnicy.

EDYCJA: Aby wyjaśnić, nie jest to problem z wysyłaniem plików cookie ajax do serwera. Problem polega na tym, że pliki cookie nie są zapisywane przez przeglądarkę w ogóle, gdy odpowiedź powraca z poprawnymi nagłówkami plików cookie (które zgodnie z dokumentacją powinny być przestrzegane niezależnie od tego, czy jest to ajax, czy nie).

+0

http://stackoverflow.com/questions/2870371/why-is-jquerys-ajax-method-not-sending-my-session-cookie –

+0

nie to samo jak to pytanie @Sam Ax. Problemem nie są kolejne żądania, ale przeglądarka nie zapisuje w ogóle plików cookie. – Peter

+0

Czy żądanie AJAX jest przesyłane do tego samego źródła (protokołu, portu, domeny) jako bieżąca strona? – CBHacking

Odpowiedz

12

Po wielu uderzeniach głową rozwiązałem ten problem, ustawiając właściwość "referencje" żądania na "uwzględnij". Miałem wrażenie, że kontroluje to tylko wysyłanie plików cookie do serwera przy żądaniach pobierania, ale najwyraźniej przynajmniej w używanej przeze mnie implementacji, jeśli nie jest ustawione, oznacza to również, że pliki cookie nie zostaną zapisane, jeśli zostaną odesłane z serwer.

Od spec w https://fetch.spec.whatwg.org/

prośbą posiada powiązaną poświadczenia tryb, który jest "pominąć", "samo-origin" lub "obejmują". O ile nie zaznaczono inaczej, jest to "pomiń".

Tryb poświadczeń żądania kontroluje przepływ poświadczeń podczas pobierania w trybie . Gdy tryb żądania to "nawiguj", jego tryb poświadczeń zakłada się, że jest on "uwzględniony", a pobieranie nie uwzględnia obecnie innych wartości . Jeśli HTML zmieni się tutaj, ten standard będzie wymagał odpowiednich zmian .

Poświadczenia to pliki cookie HTTP, certyfikaty klienta TLS i wpisy uwierzytelniające.