提问人:Mohit Kumar Sharma 提问时间:11/17/2023 最后编辑:Priyanka VadhwaniMohit Kumar Sharma 更新时间:11/17/2023 访问量:63
Cookie 在响应标头中设置,但不在浏览器中设置
Cookie is set in Response Header but not in browser
问:
我正在使用 angularja 和 angular 8 开发混合 angular 应用程序。我正在尝试实现一个需要在使用 POST 请求登录后设置的 cookie,但问题是登录后,cookie POST 请求被成功调用,并且 cookie 在网络选项卡的响应标头中可见,但在响应标头中不可见,并且在导航到应用程序选项卡中的 cookie 时, Cookie 未被存储。我已经尝试了所有可能的解决方案,但无济于事。任何可能的解决方案
成功登录后 cookie 实现的逻辑
fetch(glAccountsUrl+`/api/oauth/v3/cookie`, {
'method': 'POST',
'credentials': 'include',
'headers': { 'Authorization': `Bearer ${JSON.parse(localStorage.getItem('jwt.token'))}`,'Content-Type': 'application/json','Access-Control-Allow-Credentials': true },
'body': JSON.stringify(cookieObj)
})
.then((response) => {
return response.json();
})
.then((data)=>{
console.log(data.message);
})
}
截图
答:
1赞
Stephan Pieterse
11/17/2023
#1
看起来 Set-Cookie 正在根据此处的规范在提取调用中被过滤掉。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie
警告:浏览器会阻止前端 JavaScript 代码访问 Set-Cookie 标头,这是 Fetch 规范的要求,该规范将 Set-Cookie 定义为禁止的响应标头名称,必须从向前端代码公开的任何响应中过滤掉该名称。
不过,我对您可以使用的替代方案没有任何建议,我认为如果您使用包装 XMLHttpRequest 的东西,这种行为会有所不同。
评论
0赞
CBroe
11/17/2023
这只是关于尝试通过代码访问响应标头 - 它与 cookie 本身将发送或接收的内容无关。(必须禁止 JavaScript 访问,因为 cookie 可能不适用于运行代码的域。Set-Cookie
fetch
0赞
Stephan Pieterse
11/17/2023
你是对的,我错过了,谢谢。
0赞
Mohit Kumar Sharma
11/17/2023
@CBRoe我尝试使用 XMLHttpRequest 进行 post api 调用,即使在使用它之后,浏览器上也没有设置 cookie
评论
Max-Age={formatted date}