Как мне установить cookie от localhost - PullRequest
0 голосов
/ 23 января 2019

Я прочитал предложения здесь . Я делаю XHR-запрос к своему сервису, чтобы получить cookie. Я пытался убедиться, что Домен отсутствует в куки (а не просто в пустой строке) -

Set-Cookie: file-auth=MTU0ODIzODU1M3xEdi1CQkFFQ180SUFBUXdCREFBQUh2LUNBQUVGZG1Gc2RXVVRaRzkzYm14dllXUXRZWFYwYUc5eWFYcGxaQT09fPzBg_EP9S6wn_7gAz0iUtS1cOOaeo78VAMdD5xxhunF; Path=/; Expires=Thu, 24 Jan 2019 10:15:53 GMT

Я попытался настроить свой хост-файл так, чтобы я сделал запрос на app.localhost.com:12350, а затем указал домен в заголовке Set-Cookie -

Set-Cookie: file-auth=MTU0ODIzODg4NnxEdi1CQkFFQ180SUFBUXdCREFBQUh2LUNBQUVGZG1Gc2RXVVRaRzkzYm14dllXUXRZWFYwYUc5eWFYcGxaQT09fCdT3LhVhHIA6mPq_65ndnP1XFD2IEzLpxCmiaosHZA5; Path=/; Domain=app.localhost.com; Expires=Thu, 24 Jan 2019 10:21:26 GMT

Мой первоначальный запрос XHR (GET) - http://app.localhost.com:12350/test/file_service/setcookie

со следующими заголовками

GET /test/file_service/setcookie HTTP/1.1
Host: app.localhost.com:12350
Connection: keep-alive
Accept: application/json
Origin: http://app.localhost.com
Authorization: <MY-JWT>
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
Referer: http://app.localhost.com/tutorials
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en-US;q=0.9,en;q=0.8

И ответ возвращается -

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: http://app.localhost.com
Access-Control-Expose-Headers: Content-Length
Content-Encoding: gzip
Set-Cookie: file-auth=MTU0ODIzODg4NnxEdi1CQkFFQ180SUFBUXdCREFBQUh2LUNBQUVGZG1Gc2RXVVRaRzkzYm14dllXUXRZWFYwYUc5eWFYcGxaQT09fCdT3LhVhHIA6mPq_65ndnP1XFD2IEzLpxCmiaosHZA5; Path=/; Domain=app.localhost.com; Expires=Thu, 24 Jan 2019 10:21:26 GMT
Vary: Accept-Encoding
Vary: Origin
Date: Wed, 23 Jan 2019 10:21:26 GMT
Content-Length: 23
Content-Type: application/x-gzip

Но затем, когда вы делаете новый запрос GET на http://app.localhost.com:12350/test/file_service/file? (не XHR - я просто нажимаю на ссылку в браузере), cookie не отправляется. Просматривая вкладку «cookie» в отладчике Chrome, для домена

ничего не установлено

chrome-debugger

Как мне сделать эту работу?

1 Ответ

0 голосов
/ 23 января 2019

XMLHttpRequest имеет атрибут withCredentials, который по умолчанию равен false.Этот атрибут определяет, будет ли учитываться заголовок Set-Cookie для перекрестных запросов.

Если вы размещаете страницу на http://app.localhost.com, но вызываете http://app.localhost.com:12350, чтобы получить cookie, заголовок Set-Cookie будет игнорироваться, если для атрибута withCredentials не установлено значение true.

Настройка withCredentials будет зависеть от того, как вы делаете запрос.В старых браузерах -

var client = new XMLHttpRequest()
client.open("GET", "./")
client.withCredentials = true

Но более современное решение -

fetch("./", { credentials:"include" }).then(/* … */)

См. здесь

...