Настройка файла cookie на субдомене из запроса ajax
У меня есть webapp на www.example.com и API на api.example.com.
Webapp делает ajax-вызовы API.
Где-то мне нужно поместить cookie на api.example.com, чтобы отслеживать сеансы.
Чтобы отслеживать мою проблему, я установил тестовые куки на обоих субдоменах из webapp и api.
Webapp установил cookie на .exemple.com и api установил один на .exemple.com и другой на api.exemple.com.
Файлы cookie устанавливаются только с помощью Domain =.exemple.com. Нет пути, нет HTTPOnly.
Примечание. В конце мне нужно только одно на api.exemple.com. Но тезисы для тестов.
Прямые запросы с использованием моего браузера (Firefox 16) отлично работают.
Запрос на api: два файла cookie установлены и отправлены.
Запрос на www: cookie установлен, и отправляются два из api. (При условии, что я запрошу www после api, конечно).
Теперь я очищаю cookie браузера и запрашиваю только www.
Запрос на www: работает отлично, как и раньше.
Подзапрос на api, из www ajax request: cookie не отправляется. Set-Cookies ничего не делает. Использование Firebug Я вижу файлы cookie в ответе. Но никаких следов от них при последующих запросах или информации о странице.
Событие
I попыталось включить журнал cookie в Firefox. Абсолютно никаких следов куки файлов из api, даже отклонение уведомления.
В конце концов мне нужен только способ хранения одного файла cookie на api. И для этого я полностью открываю:)
Информация:
Два сервера - NodeJS.
Я попытался установить файл cookie на стороне сервера (заголовок Set-Cookie) на стороне клиента (document.cookies) вручную с помощью firebug.
Другие сообщения, которые я проверил без каких-либо решений (и многие другие, о которых я не помню):
настройка кросс-субдомена cookie с javascript
Печенье и субдомены
Может ли subdomain.example.com установить cookie, который может быть прочитан example.com?
Ответы
Ответ 1
Установите заголовок Разрешить учетные данные на api
Access-Control-Allow-Credentials: true
Используйте withCredentials
для запроса
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});
В противном случае XMLHttpRequest
будет не отправлять файлы cookie независимо от заголовка Access-Control-Allow-Credentials
.
Удалите подстановочный знак на Access-Control-Allow-Origin
Access-Control-Allow-Origin: http://www.example.com
Подстановочный знак *
не будет работать. Браузер отменит ответ, если был установлен withCredentials
.
Литература:
http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/
https://developer.mozilla.org/en-US/docs/HTTP_access_control
http://arunranga.com/examples/access-control/credentialedRequest.html
http://api.jquery.com/jQuery.ajax/