Cookie не отправляется с веб-запросом CORS - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь установить cookie с датой истечения срока действия:

response.Cookies.Append("theKey", value, new CookieOptions() { Expires = DateTime.Now.AddMonths(12) });

cookie сохраняется в браузере, но не отправляется в последующем межсайтовом веб-запросе.

Когда я пытаюсь установить файл cookie без даты Expires, файл cookie отправляется, но он сохраняется в браузере только при открытом браузере (сеансовый файл cookie).

Этомежсайтовый запрос.Код JavaScript, который вызывает функцию:

var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", url, true);
xmlHttp.withCredentials = true;
xmlHttp.onreadystatechange = function () {
    if (this.readyState == 4 && this.status == 200) {
        //console.log(this.responseText);
    }
};
xmlHttp.send(null);

Есть ли способ отправить файл cookie, содержащий Expires дату в межсайтовом запросе?

И клиентское веб-приложение, иПриложение функции (которое пытается установить cookie) использует https.

Это HTTP-ответ, устанавливающий cookie с датой истечения срока действия:

enter image description here

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Решение состоит в том, чтобы пропустить атрибут cookie samesite.Это позволяет отправлять cookie вместе с межсайтовыми запросами из кода javascript.

Возможные значения атрибута samesite (https://www.owasp.org/index.php/SameSite):

  • строго - cookie не отправляется для перекрестного-сайтовые запросы
  • lax - cookie отправляется для межсайтовых запросов, только когда пользователь переходит по обычной ссылке
  • (не задано) - cookie отправляется для межсайтовых запросов

В .NET Core необходимо явно указать cookie, чтобы не создавать атрибут samesite, так как по умолчанию lax:

response.Cookies.Append("theCookie", value, new CookieOptions() 
{ 
    Expires = DateTime.Now.AddMonths(12), 
    SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None 
});
0 голосов
/ 01 марта 2019

Ваш сервер должен включать следующий заголовок ответа CORS:

 Access-Control-Allow-Credentials: true

в дополнение к заголовку Access-Control-Allow-Origin, который вы уже отправляете.

Без заголовка ACAC браузерне будет обрабатывать заголовки ответа Set-Cookie от источника.Я подозреваю, что cookie устанавливается заголовком ответа Set-Cookie в другом ответе.

...