我添加了SameSite = None;安全;设置cookie。但是未设置Cookie,因此无法登录到我的网站。
response.writeHead(200, {
'Content-Type': 'application/json',
'Set-Cookie': 'token=' + token + '; SameSite=None; Secure; Expires=' + time.toUTCString() + '; Path=/' + '; Domain=' + hostname,
'csrf-token': csrfToken
});
我查看了开发人员工具中“应用程序”>“存储”>“ Cookies”下的cookie,并查看了更多详细信息。它显示警告消息:
此set-cookie被阻止,因为它不是通过安全连接发送的
chrome阻止cookie,因为我在开发环境中工作并且发送http请求。但是此测试在Firefox浏览器上正确登录。
我在cookie中放入了安全一词,并且可以正常使用,但是因为 samesite = none 旁边必须使用安全一词,所以>跨域,否则Cookie将被阻止。
我的问题是为什么当我使用安全时,只有Chrome浏览器会阻止cookie,而在其他浏览器中却是如此。
而且,如果我不使用安全,那么我将无法测试支付网关,因为如果我不使用安全协议,它将阻止Chrome异域访问。
答案 0 :(得分:2)
我的问题是为什么当我使用安全时,只有Chrome浏览器会阻止 cookie,但在其他浏览器中确实如此
我不确定其他浏览器,但Chrome实施了根据此IETF draft通过安全连接允许具有secure
属性的cookie的策略。
虽然此草案是为Chrome实施的,但不是在Firefox上,这就是为什么您在Firefox中转到about:config > network.cookie.sameSite.noneRequiresSecure
的原因,默认值为 false 。
如果您只需要针对本地开发环境执行此操作,则可以通过禁用
来保留chrome中Cookie的旧行为。我必须支持旧版HTTP客户端,但是如果我使用https://来源 安全,我无法从http设置cookie,而且我无法访问它 来自http的cookie,我的目标是拥有SameSite = None,在http和 在http://来源,任何想法上都不安全,而不是建立 谷歌办公室附近发生抗议?
鉴于这将在不久的将来成为标准,我怀疑您是否能够为客户端应用程序实现这种行为,只有路由是安全的HTTPS。
参考:
答案 1 :(得分:2)
Sometome cookie无法正常工作,因为某些cookie滥用了sameSite
属性。
Cookie SomeCookie
被拒绝的原因是它具有sameSite=none
属性,但缺少secure
属性。因此,任何请求SameSite=None
的cookie都必须标记为Secure
。
Set-Cookie: product=pen; SameSite=None
要解决此问题,必须将Secure
属性添加到SameSite=None
cookie中。
Set-Cookie: flavor=choco; SameSite=None; Secure
安全Cookie仅通过HTTPS
协议以加密请求发送到服务器。
注意:不安全的网站(http:)
无法使用Secure
指令设置Cookie。