我正在使用 /login
标记执行withCredentials = true
POST 请求。并且响应是预期的,如果我使用Chrome Dev Tools -> Network
进行检查,我可以看到名为Set-Cookie
的响应标头,其中包含以下内容:
Set-Cookie:JSESSIONID=1944a870623c3499ea938df17a5g; Path=/; Secure; HttpOnly
浏览器中未创建 Cookie (如果我不刷新页面)。 BTW:在Postman中创建了cookie ......
我通过 Angular v.2.4.2
理论上,cookie会自动创建,不是吗?顺便说一句,我无法访问Set-Cookie
响应标题:
const options = new RequestOptions({ headers, withCredentials: true });
const body = `username=${username}&password=${password}`;
return this.http.post(`${host}${basePath}/login`, body, options)
.do(r => {
console.log(r.headers.get('Set-Cookie')); // Nothing… :( Only I can access to Content-Type header
})
.map(r => r.json())
我认为这是正常的,如果理论上cookie将自动创建,但不会被创建....
为什么不创建cookie?我该如何解决?
非常感谢你!
答案 0 :(得分:2)
事实上,你不能通过javascript访问cookie,并不意味着它没有被创建。
只能通过javascript访问仅限Http的cookie (这是针对XSS攻击的保护)
您的浏览器会自动发送包含withCredentials: true
的每个请求的给定Cookie。
前几天我遇到过类似的问题。看看这里:
Angular2 http post - how to send Authorization header?
Unable to exchange cookie between Spring and Angular2
有关httponly cookies和XSS的更多信息
https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Secure_and_HttpOnly_cookies https://www.owasp.org/index.php/HttpOnly