Cookie 在响应标头中设置,但不在浏览器中设置

Cookie is set in Response Header but not in browser

提问人:Mohit Kumar Sharma 提问时间:11/17/2023 最后编辑:Priyanka VadhwaniMohit Kumar Sharma 更新时间:11/17/2023 访问量:63

问:

我正在使用 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);
                      })
                }

截图

cookies in response header

no cookie in response header

cookie not stored

javascript 角度 angularjs

评论

1赞 CBroe 11/17/2023
您的第一个屏幕截图显示了 Set-Cookie 标头旁边,因此我认为问题出在 cookie 本身,⚠️而不是您的获取代码。将鼠标悬停在该图标上是否会显示更多信息?
1赞 Stephan Pieterse 11/17/2023
stackoverflow.com/questions/72939811/......这里有一个类似的问题,它也可能提供一些线索来说明为什么它没有被设置。不过,您的后端可能有所不同,但原理可能相同。
0赞 Mohit Kumar Sharma 11/17/2023
@CBroe实际上当时我正在使用本地环境,但我已将代码部署到暂存环境,并且在该环境中它没有显示任何警告或问题符号,因此问题可能是其他问题
1赞 CBroe 11/17/2023
在屏幕截图的 Set-Cookie 标头中,它位于末尾,这绝对是错误的 - 此值需要是一个数字,即此 cookie 到期前的秒数。Max-Age={formatted date}
1赞 Volodymyr Usarskyy 11/17/2023
这是你的答案 https://stackoverflow.com/questions/52183751/chrome-69-doesn't-accept-cookie-on-127-0-0-1-anymore

答:

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-Cookiefetch
0赞 Stephan Pieterse 11/17/2023
你是对的,我错过了,谢谢。
0赞 Mohit Kumar Sharma 11/17/2023
@CBRoe我尝试使用 XMLHttpRequest 进行 post api 调用,即使在使用它之后,浏览器上也没有设置 cookie