Может ли ответ AJAX установить cookie?

226

Может ли ответ AJAX установить cookie? Если нет, то каково мое альтернативное решение? Должен ли я установить его с помощью Javascript или чего-то подобного?

  • 0
    Я использую node.js Express. Я заметил, что если вы сделаете это, вы должны установить для поля httpOnly значение false на стороне сервера, очевидно.
Теги:
cookies

4 ответа

208
Лучший ответ

Да, вы можете установить cookie в запросе AJAX в серверном коде так же, как и для обычного запроса, так как сервер не может различать обычный запрос или запрос AJAX.

Запросы AJAX - это просто особый способ запроса на сервер, сервер должен будет ответить так же, как и в любом HTTP-запросе. В ответ на запрос вы можете добавить файлы cookie.

  • 33
    Имейте в виду, что соблюдение cookie-файла агентом HTTP - это отдельная история.
  • 6
    @Franci: согласился. Но я думаю, что вопрос имеет смысл только для клиентов http, которые поддерживают cookie. Поэтому все, кто задает вопрос, хотят знать, можно ли записывать файлы cookie в запросе AJAX, что означает, что его UA поддерживает файлы cookie :)
Показать ещё 5 комментариев
264

В соответствии с спецификацией w.3 раздела 4.6.3 для XMLHttpRequest пользовательский агент должен соблюдать заголовок Set-Cookie. Итак, ответ: да, вы должны быть в состоянии.

Цитата:

Если пользовательский агент поддерживает HTTP State Management, он должен сохраняться, отбрасывать и отправлять файлы cookie (полученные в ответе Set-Cookie заголовок и отправленный в заголовке Cookie), если применимо.

  • 36
    +1 за ссылку
  • 1
    Поддерживает ли IE заголовок Set-Cookie в ответах в случае ответов XHR?
Показать ещё 3 комментария
78

Для записи следует иметь в виду, что все вышеизложенное (правда) истинно, только если вызов AJAX выполняется в том же домене. Если вы изучаете настройки файлов cookie в другом домене с помощью AJAX, вы открываете совершенно другую червь из червей. Однако чтение междоменных файлов cookie действительно работает (или, по крайней мере, сервер обслуживает их, независимо от того, разрешает ли ваш клиент UA ваш код для доступа к ним, опять же другая тема, с 2014 года).

  • 5
    Спасибо, что вставил это. Это то, что я искал, когда натолкнулся на это. ^ __ ^
  • 22
    Для отправки междоменных файлов cookie необходимо установить флаг withCredentials
Показать ещё 1 комментарий
5

Также убедитесь, что ваш сервер не устанавливает безопасные файлы cookie в запросе, отличном от http. Просто выяснилось, что мой запрос ajax получил сеанс php с "защищенным" набором. Поскольку я не был на https, он не отправлял файлы cookie сессии, и моя сессия получала reset для каждого запроса ajax.

  • 0
    Можете ли вы сказать мне, где я могу проверить, установлен ли ajax secure?
  • 0
    Это не совсем AJAX. Проверьте «Безопасный» в ответе заголовка Set-Cookie от сервера, если вы используете небезопасный http: //

Ещё вопросы

Сообщество Overcoder
Наверх
Меню