Chrome在redirect后不会发送Cookie

node.js(使用Hapi框架)我创build用户的链接,以允许我的应用程序读取用户帐户。 Google处理该请求并询问授予权限。 然后谷歌使用GET参数作为响应代码redirect到我的服务器,在这里我有一个问题。

谷歌浏览器不会发送带有会话ID的cookie。

如果我在cookie编辑扩展中将该cookie标记为会话cookie,则会发送该cookie。 同样的行为在PHP中,但PHP创build会话时标记为会话,所以这不是问题。 我正在使用插件hapi-auth-cookie,它会创build会话并处理它的一切。 我也将这个cookie标记为非HttpOnly的hapi-auth-cookie设置,因为这是第一个区别,我注意到,当检查PHP会话cookie和我的node.js。 我有响应401缺less身份validation每个redirect。 如果我把光标放在地址栏并按回车,一切正常,所以这是一个redirect的问题。

我的问题基本上是什么可能导致这种行为。 另一方面,我不得不提到,每次请求后,firefox都会发送cookie而不会有任何问题。

redirect后的标题(没有会话的cookie):

{ "host": "localhost:3000", "connection": "keep-alive", "cache-control": "max-age=0", "upgrade-insecure-requests": "1", "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", "x-client-data": "CJS2eQHIprbJAQjEtskECKmdygE=", "x-chrome-connected": "id=110052060380026604986,mode=0,enable_account_consistency=false", "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "accept-encoding": "gzip, deflate, sdch, br", "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4" } 

点击后进入地址栏(什么会正常工作):

 { "host": "localhost:3000", "connection": "keep-alive", "cache-control": "max-age=0", "upgrade-insecure-requests": "1", "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36", "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "accept-encoding": "gzip, deflate, sdch, br", "accept-language": "pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4", "cookie": "SESSID=very_long_string" } 

       

网上收集的解决方案 "Chrome在redirect后不会发送Cookie"

这个问题是由hapi-auth-cookie导致的,而不是与isSameSite(Hapi的新特性)交易。 我们可以手动设置,例如。

 const server = new Hapi.Server( connections: { state: { isSameSite: 'Lax' } } ); 

但请考虑一下,默认情况下,您有'Strict'选项,在很多情况下您可能不想更改该值。

此问题的独立演示: https : //gist.github.com/isaacs/8d957edab609b4d122811ee945fd92fd

这是Chrome中的一个错误。