浏览器不保存cookie

时间:2017-08-08 12:21:23

标签: angular cookies cors

我的问题是:浏览器不会从Set-Cookie标题中保存Cookie 我有在我桌面本地部署的前端(Angular2)。在登台服务器上的后端,因此交互在CORS上。

我在请求中使用Set-Cookie标题获取的内容:

HTTP/1.1 200 OK
Date: Tue, 08 Aug 2017 11:00:03 GMT
Server: .....
Access-Control-Allow-Origin: http://localhost:4200
Access-Control-Allow-Credentials: true
Content-Type: application/json
Content-Length: 39
Set-Cookie: session=.........; Path=/
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive

在我得到上述答案后,我发送了以下请求:

GET /api/..... HTTP/1.1
Host: ...{some url}...
Connection: keep-alive
Origin: http://localhost:4200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Content-Type: application/json
Accept: application/json, text/plain, */*
withCredentials: true
Referer: http://localhost:4200/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,ru;q=0.6,uk;q=0.4

如您所见,那里没有饼干。此外,我无法在外部应用程序(Chrome插件),JS控制台和Application部分的Web控制台中看到它们。因此浏览器肯定不会保存cookie。

我的问题是:问题出在哪里?我的标题/其他内容是否有问题,或者是标题的后端问题?问题出在哪里?

关于重复的答案 - 正如您将能够看到的那样,我尝试了其他主题中我能够找到的答案,但它们并没有解决我的问题。

3 个答案:

答案 0 :(得分:4)

无意中找到了答案。那些会得到同样问题的人,  检查您是否以正确的方式定义标题 原因是withCredentials标题和他在Angular中的定义。要正确设置,您应该按以下方式进行设置:

let options = new RequestOptions();
options.withCredentials = true;

使用这种语法,一切都应该没问题。

答案 1 :(得分:1)

可以直接进入http.method ...

this.http.get(url, { withCredentials: true });

答案 2 :(得分:0)

我遇到了这个问题并在登录调用中使用了 {with Credentials: true} 选项。这对我来说没有意义,但如果没有它,它根本不会写 cookie。我只是发布这个答案来强调它需要在登录调用选项中。