Заголовок Set-Cookie (из AJAX) не устанавливает cookie в браузере - PullRequest
0 голосов
/ 16 мая 2018

У меня есть одностраничное приложение, которое использует веб-API.Когда пользователь входит в систему, я бы хотел, чтобы сервер установил cookie для дальнейшей идентификации.

AJAX-запросы, очевидно, HTTP, только с небольшим идентифицирующим заголовком.Насколько я знаю, агент браузера не должен различать XMLHttpRequest от обычных запросов.Тем более, что я использую относительно старую версию firefox.

URL приложения: http://sub.domain.com/app Запрос API: http://sub.domain.com/service/method

Домен и поддомен абсолютно совпадают.Мы не пытаемся изменить файлы cookie других доменов.

enter image description here

Как видите, cookie распознается парсером запросов браузера.Даже после того, как я покопался в SO и Google, я не нашел ни одного логического объяснения, почему это не устанавливает cookie.

Попробовал несколько различных комбинаций аргументов Set-Cookie.Я полагал, что самый стабильный синтаксис - key=value; expires=date; domain=.domain.com, и это то, что я использую в приведенном выше примере.

PS Я использую фактический домен и поддомен, а НЕ localhost.Использование относительно старой и стабильной версии Firefox.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Проблема может возникнуть по двум причинам:

  1. Заголовок Set-Cookie возвращается из запроса HTTPS на веб-сайт HTTP.
  2. Атрибут «Путь» не задан, поэтому по умолчанию используется путь API URI (как объяснил Тарун Лалвани).

Синтаксис, который закончил работать, был:

Set-Cookie: test=working; Domain=.domain.com; Path=/; Secure
0 голосов
/ 29 мая 2018

Я думаю, что ваша проблема довольно хорошо объяснена здесь

Как браузер обрабатывает cookie без пути и без домена

Для Set-Cookie без атрибута пути,RFC6265 утверждает, что:

Если на сервере не указан атрибут Path, пользовательский агент будет использовать «каталог» компонента пути request-uri в качестве значения по умолчанию.

Таким образом, с вашего сервера вам нужно также установить path=/, чтобы убедиться, что куки доступны каждому *

Edit-1

Также убедитесь, что ваша веб-страница иОба API работают по одному и тому же протоколу.Потому что если cookie помечен как защищенный, то он не может быть прочитан http url

...