Angular:未创建Cookie

时间:2017-01-19 12:06:32

标签: javascript http angular cookies

我正在使用 /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?我该如何解决?

非常感谢你!

1 个答案:

答案 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

https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)