Я размещаю веб-сайт одностраничного приложения на stati c сервере (например, Amazon S3), поэтому он обслуживается через URL-адрес моего приложения, скажем, "example.com". Таким образом, сайт живет на уровне "https://example.com". Этот сайт использует вызовы API, сделанные с помощью вызова JavaScript fetch () для выполнения функций сайта. Поскольку example.com указывает на сервер * stati c, API вызывает go для другого домена, давайте назовем его «xyz.execute-api.cloudhost.com» (это происходит за API-шлюзом Amazon).
Я хочу использовать куки для управления сеансом пользователя. То есть я хочу, чтобы один вызов API возвращал заголовок Set-Cook ie в ответе, который будет хранить cook ie в браузере, и я хочу, чтобы некоторые другие вызовы API передавали заголовок Cook ie в запросе. который затем может быть проверен в API. Повар ie всегда будет поступать из API и возвращаться в API (НЕ на сайт страницы, поскольку сама страница размещена на сервере c). Я хочу, чтобы повар ie сохранялся между сессиями (с некоторым сроком действия и пониманием того, что браузер может очистить его из-за нехватки места или действий пользователя).
Но это трудно сделать. Прежде всего, все мои вызовы API относятся к отдельному домену, поэтому я должен использовать CORS для авторизации вызовов. Когда я использую CORS, сервер должен включить «Cook ie» в список для Access-Control-Allow-Headers, иначе он не будет возвращен. Кроме того, когда я использую API Javascript fetch () для выполнения вызова, мне нужно указать, чтобы включить учетные данные, например:
fetch(url, {method: "POST", credentials: "include"})
... или повар ie не будет отправлено. Вызов API, который ВОЗВРАЩАЕТ куки, не должен получать куки, но я также должен указать credentials: "include"
, иначе браузер проигнорирует этот заголовок ответа Set-Cook ie.
Мне также нужно правильно настроить самого повара ie. Различные вызовы API имеют разные пути, поэтому мне нужно указать Path=/
в моем заголовке Set-Cook ie. Я бы предпочел установить SameSite=Strict
, Secure
, HttpOnly
и значение для Max-Age
, но я готов проявить гибкость, если это необходимо.
И это насколько я получил. Я до сих пор не могу разместить свои куки (с помощью Set-Cook ie) и вернуть их на сервер (в Cook ie) кросс-платформенным способом. Поскольку домен страницы не совпадает с доменом API, мне может потребоваться указать SameSite=None
, но если я это сделаю, недавние изменения стандартов могут потребовать от меня также установить Secure
(что отлично). Несмотря на это, я не могу заставить все основные браузеры вернуть повара ie. Я также ожидал, что установка нового повара ie с тем же ключом заменит существующий, но я также не могу заставить его работать - когда он возвращается, я вижу оба куки.
Что такое правильный способ использования файлов cookie в этой ситуации?