Чи може відповідь AJAX встановити файл cookie? Якщо ні, то яке моє альтернативне рішення? Чи слід його встановлювати за допомогою Javascript або щось подібне?
Чи може відповідь AJAX встановити файл cookie? Якщо ні, то яке моє альтернативне рішення? Чи слід його встановлювати за допомогою Javascript або щось подібне?
Відповіді:
Так , ви можете встановити файли cookie у запиті AJAX у коді на стороні сервера так само, як і для звичайного запиту, оскільки сервер не може диференціювати звичайний запит або запит AJAX.
Запити AJAX - це лише особливий спосіб запиту на сервер, сервер повинен відповісти назад, як і в будь-якому HTTP-запиті. У відповідь на запит ви можете додати файли 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.
- від w3.org/TR/XMLHttpRequest
Згідно з розділом 4.6.3 специфікації w3 для XMLHttpRequest, агент користувача повинен шанувати заголовок Set-Cookie. Отже, відповідь - так, ви повинні вміти.
Цитата:
Якщо користувальницький агент підтримує управління HTTP State, він повинен зберігатись, відкидати та надсилати файли cookie (як отримано у заголовку відповіді Set-Cookie та надісланому у заголовку Cookie) у відповідних випадках.
Для запису слід пам’ятати, що все вищезазначене (все-таки) відповідає дійсності лише в тому випадку, якщо дзвінок AJAX здійснювався в одному домені. Якщо ви шукаєте налаштування файлів cookie на іншому домені за допомогою AJAX, ви відкриваєте зовсім іншу банку глистів . Читання файлів cookie між доменами працює, але (або принаймні сервер їх обслуговує; чи дозволить UA вашого клієнта отримати доступ до коду, знову ж таки, це інша тема; станом на 2014 рік вони).
withCredentials=true
для xhr
об'єкта (2) Встановити Access-Control-Allow-Credentials
як в OPTIONS передпольотного запиті, а також фактичне запиті (3) Набір печиво по мірі необхідності
Також переконайтеся, що ваш сервер не встановлює захищені файли cookie на запит, який не є http. Щойно з'ясував, що мій запит на ajax отримує сеанс php із "безпечним" набором. Оскільки я не був на https, він не відсилав файли cookie сеансу, і мій сеанс перезавантажувався під час кожного запиту ajax.