Angular: Cookie is not created Angular:Cookie未被创建
Angular: Cookie is not created Angular:Cookie未被创建
我正在使用标志/login
的POST请求,标志为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没有被创建?我该如何解决?
非常感谢!
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_cookies 和 https://www.owasp.org/index.php/HttpOnly 和 https://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