Подтвердить что ты не робот

Настройка файла 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?

4b9b3361

Ответ 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/