我可能对Cookie的一些基本事情有所疏忽。在本地主机上,当我在服务器端设置cookie并将域名显式指定为localhost(或.localhost)时,某些浏览器似乎无法接受该cookie。
Firefox 3.5:我在Firebug中检查了HTTP请求。我看到的是:
Set-Cookie:
name=value;
domain=localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
或者(当我将域名设置为.localhost时):Set-Cookie:
name=value;
domain=.localhost;
expires=Thu, 16-Jul-2009 21:25:05 GMT;
path=/
在任何一种情况下,cookie 都不会被存储。IE8:我没有使用任何额外的工具,但是 cookie 似乎也没有被存储,因为它没有在随后的请求中被发送回来。
Opera 9.64:localhost 和 .localhost 都可以正常工作,但是当我在首选项中检查 cookie 列表时,域名设置为 localhost.local,尽管它在 localhost 下列出(在列表分组中)。
Safari 4:localhost 和 .localhost 都可以正常工作,但是它们总是在首选项中列为 .localhost。另一方面,一个没有明确域名的 cookie,会显示为仅 localhost(没有点)。 localhost 的问题是什么?由于存在这么多不一致,必须有一些涉及 localhost 的特殊规则。而且,对我来说并不完全清楚为什么域名必须以点号开头。RFC 2109 明确规定:
“Domain 属性的值不包含任何嵌入的点或不以点开头。”
为什么?该文档指出这与安全有关。我必须承认我没有读完整个规范(可能稍后会读),但这听起来有点奇怪。基于此,在 localhost 上设置 cookie 将是不可能的。
chrome://flags
中禁用'Cookies without SameSite must be secure',以允许使用SameSite=None
或SameSite=Lax
,而不仅仅是Secure。 - ntsd