Я знаю, что это было задано раньше в разных формах, но я не могу обойти эту проблему. Я попытался использовать jQuery и собственный JS API для выполнения запросов Ajax.
Моя ситуация следующая (см. прилагаемую диаграмму):
- Браузер выполняет запрос HTTP
- Сервер отвечает и устанавливает постоянное Cookie
- Браузер делает HTTP-запрос Ajax, Cookie там в порядке
- Сервер отвечает как ожидалось, обновляет Cookie
- Браузер делает запрос HTTPS Ajax, Cookie больше не существует (?!)
- Сервер дает ответ "по умолчанию", так как нет Cookie (непреднамеренное поведение)
Прежде чем кто-нибудь начнет читать лекцию о междоменных запросах, позвольте мне сказать пару вещей:
- Я знаю, что это междоменный запрос (другой протокол), и поэтому сервер устанавливает заголовок
Access-Control-Allow-Origin
в ответе (и я использую Chrome и Firefox, оба из которых поддерживают CORS) - Тем не менее, я знаю, что HTTP файл cookie должен управляться через HTTPS (см. здесь), так как хост является тем же
- (EDIT) Файл cookie правильно настроен для общего домена (например .domain.ext), и не установлены флаги HttpOnly и Secure.
Итак, почему, почему, почему браузер не передает cookie при выполнении вызова HTTPS Ajax? Есть идеи? Я собираюсь потерять сознание...
+-----------+ HTTP Request +-----------+
|Browser |+---------------->|Server |
+-----------+ +-----------+
HTTP Response
<----------------+
Set-cookie
Ajax HTTP Req.
+---------------->
Cookie (OK)
HTTP Response
<----------------+
Set-cookie (OK)
Ajax HTTPS Req.
+---------------->
No Cookie (!!!)