Angular: Cookie is not created Angular:Cookie未被创建

21 浏览
0 Comments

Angular: Cookie is not created Angular:Cookie未被创建

我正在使用标志/loginPOST请求,标志为withCredentials = true。响应是符合预期的,如果我使用Chrome Dev Tools -> Network进行检查,我可以看到一个名为Set-Cookie的响应头,内容如下:

Set-Cookie:JSESSIONID=1944a870623c3499ea938df17a5g; Path=/; Secure; HttpOnly

但是...

cookie没有在浏览器中创建(刷新页面也是如此)。顺便说一下:在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')); // 什么都没有... :( 我只能访问Content-Type头
  })
  .map(r => r.json())

我想如果理论上cookie应该会自动创建,那么这是正常的,但是没有创建...

为什么cookie没有被创建?我该如何解决?

非常感谢!

0
0 Comments

Angular: Cookie is not created

在Angular中,无法通过JavaScript访问cookie并不意味着cookie没有被创建。Http-only cookie无法从JavaScript中访问(这是防止XSS攻击的保护措施)。你的浏览器将自动发送带有withCredentials: true的请求,并附带给定的cookie。几天前我遇到了类似的问题,请参考:Angular2 http post - how to send Authorization header?Unable to exchange cookie between Spring and Angular2

关于httponly cookie和XSS的更多信息,请参考:https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Secure_and_HttpOnly_cookieshttps://www.owasp.org/index.php/HttpOnlyhttps://www.owasp.org/index.php/Cross-site_Scripting_(XSS)

但是,如果我使用Chrome -> Application -> Cookies进行检查,什么都没有出现...这正常吗?是的,这是预期的行为,出于同样的原因。

我已经编辑了我的答案,请看一下。如果您能将我的答案标记为解决您的问题的答案,并/或者给予一些赞赏,我将非常感激。

但是,在/login之后,如果我进行更多的请求,请求头是相同的!也许应该有Set-Cookie头告诉服务器我已经登录了吗?如果我无法访问cookie,我该如何设置这个头部呢?真是让人困惑啊!

Set-Cookie是服务器发送的头部,它通知浏览器使用给定的值创建cookie。浏览器将在向给定的源/服务器发送的每个请求中附加cookie(除了http-only cookie)。如果您想发送http-only cookie,您需要使用withCredentials。请查看我在这里的答案:stackoverflow.com/questions/41568828/…

我现在有点困惑了。在除了/login之外的所有需要登录的请求中,是否都需要将withCredentials = true设置为true?还是只在/login中设置为true?

如果您的用户被视为已登录状态,并且依赖于cookie,那么对于每个请求,应该将withCredentials设置为true。我建议您参考OAuth2规范,这是一种在Web应用程序中授权请求的很好的标准。aaronparecki.com/2012/07/29/2/oauth2-simplified

0