Czy odpowiedź AJAX może ustawić plik cookie? Jeśli nie, jakie jest moje alternatywne rozwiązanie? Czy powinienem ustawić JavaScript, czy coś podobnego?
Czy odpowiedź AJAX może ustawić plik cookie? Jeśli nie, jakie jest moje alternatywne rozwiązanie? Czy powinienem ustawić JavaScript, czy coś podobnego?
Odpowiedzi:
Tak , możesz ustawić plik cookie w żądaniu AJAX w kodzie po stronie serwera, tak jak w przypadku zwykłego żądania, ponieważ serwer nie może odróżnić zwykłego żądania od żądania AJAX.
Żądania AJAX to tylko specjalny sposób wysyłania zapytań do serwera, serwer będzie musiał odpowiedzieć jak w przypadku każdego żądania HTTP. W odpowiedzi na zapytanie możesz dodać pliki cookie.
If the user agent supports HTTP State Management it should persist, discard and send cookies (as received in the Set-Cookie response header, and sent in the Cookie header) as applicable.
- z w3.org/TR/XMLHttpRequest
Zgodnie z sekcją 4.6.3 specyfikacji w3 dla XMLHttpRequest agent użytkownika powinien honorować nagłówek Set-Cookie. Odpowiedź brzmi: tak, powinieneś być w stanie.
Cytat:
Jeśli klient użytkownika obsługuje zarządzanie stanem HTTP, powinien on zachować, odrzucić i wysłać pliki cookie (tak jak otrzymano w nagłówku odpowiedzi Set-Cookie i wysłano w nagłówku Cookie), stosownie do przypadku.
Dla przypomnienia, należy pamiętać, że wszystkie powyższe są (nadal) prawdziwe tylko wtedy, gdy wywołanie AJAX jest wykonywane w tej samej domenie. Jeśli chcesz ustawić pliki cookie w innej domenie za pomocą AJAX, otwierasz zupełnie inną puszkę robaków . Odczytywanie plików cookie między domenami działa jednak (lub przynajmniej serwer je obsługuje; to, czy UA klienta pozwala na dostęp do kodu, jest znowu innym tematem; od 2014 r. Tak jest).
withCredentials=true
do xhr
obiektu (2) Ustaw Access-Control-Allow-Credentials
zarówno w opcjach prefligtu życzenie, a także rzeczywistego życzenie (3) Ustaw cookie w miarę potrzeb
Sprawdź także, czy Twój serwer nie ustawia bezpiecznych plików cookie na żądanie inne niż HTTP. Właśnie dowiedziałem się, że moje żądanie ajax otrzymywało sesję php z ustawionym „bezpiecznym”. Ponieważ nie korzystałem z protokołu https, nie wysyłałem z powrotem pliku cookie sesji, a moja sesja była resetowana przy każdym żądaniu ajax.