我的问题是:浏览器不会从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。
我的问题是:问题出在哪里?我的标题/其他内容是否有问题,或者是标题的后端问题?问题出在哪里?
关于重复的答案 - 正如您将能够看到的那样,我尝试了其他主题中我能够找到的答案,但它们并没有解决我的问题。
答案 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。我只是发布这个答案来强调它需要在登录调用选项中。