Cookie “PHPSESSID” 将很快被视为针对 <file> 的跨站点 cookie,因为该方案不匹配

Posted

技术标签:

【中文标题】Cookie “PHPSESSID” 将很快被视为针对 <file> 的跨站点 cookie,因为该方案不匹配【英文标题】:Cookie “PHPSESSID” will be soon treated as cross-site cookie against <file> because the scheme does not match 【发布时间】:2020-11-27 13:34:15 【问题描述】:

我刚刚注意到我的控制台到处都是这个警告,出现在每个链接的资源上。这包括所有引用的 CSS 文件、javascript 文件、SVG 图像,甚至来自 ajax 调用(以 JSON 响应)的 U​​RL。但不是图片。

警告,例如在style.css 文件的情况下,会说:

Cookie“phpSESSID”将很快被视为针对“http://localhost/style.css”的跨站点 cookie,因为该方案不匹配。

但是,方案与什么不符?文件?因为确实如此。

我网站的网址是http://localhost/。 网站及其资源都在http(本地主机上没有https) 域名肯定没有什么不同,因为所有内容都是相对于域名引用的(意味着文件路径以斜杠href="/style.css"开头)

网络检查器只报告一个绿色的200 OK 响应,显示一切正常。

只有 Mozilla Firefox 对此有所抱怨。 Chromium 似乎不关心任何事情。我没有任何浏览器插件。警告似乎来自浏览器,每个警告都链接到在 Debugger 中查看相应的文件源。

为什么会出现这种情况?

【问题讨论】:

tl;dr 在 Firefox 中,转到设置,搜索 cookie,单击管理数据,搜索本地主机,选择本地主机,单击删除选定...为我工作... 此外,您可以在 Firefox 中按照以下简单步骤操作:support.mozilla.org/en-US/kb/… 【参考方案1】:

这和我发生的完全一样。问题是,Firefox 让我什至显示托管在同一 URL 上的不同网站的 Cookie:“本地主机:端口号”存储在浏览器内存中。

在我的例子中,我有两个项目配置为在http://localhost:62601 运行,当我运行第一个项目时,它会将该 cookie 保存在浏览器内存中。当我运行具有相同 URL 的第二个项目时,该项目控制台中也可以使用 Cookie。

你能做的就是从浏览器中删除所有的cookies。

【讨论】:

我从 VirtualBox 运行多个开发项目,通过相同的 IP 地址访问,但通过我的 hosts 文件中定义的域进行访问。删除 cookie 似乎使消息消失了。 你也可以去开发工具->存储,选择“localhost”域和“/”路径的行,然后右键删除选中的cookie。【参考方案2】:

@Paramjot Singh 的回答是正确的,让我大部分时间都到达了我需要去的地方。我还浪费了很多时间盯着那些警告。

但要澄清一点,您不必删除所有 cookie 即可解决此问题。在 Firefox 中,您可以删除单个站点 cookie,这会将您的设置保留在其他站点上。

为此,请点击右上角的汉堡菜单,然后点击Options-&gt;Privacy &amp; SecuritySettings-&gt;Privacy &amp; Security

从这里向下滚动大约一半,然后找到 Cookie 和网站数据。不要点击Clear Data。而是单击Manage Data。然后,搜索您发布通知的网站,将其突出显示,然后Remove Selected

很简单,我知道,但我犯了第一次清除所有内容的错误 - 也许这会阻止某人这样做。

【讨论】:

【参考方案3】:

发出警告是因为,根据MDN web docs:

与 Cookie SameSite 属性相关的标准最近发生了如下变化:

如果未指定 SameSite,则 cookie 发送行为是 SameSite=Lax。以前的默认设置是为所有请求发送 cookie。 SameSite=None 的 Cookie 现在还必须指定 Secure 属性(它们需要安全上下文/HTTPS)。

这表明需要安全上下文/HTTPS 才能通过为 cookie 设置 SameSite=None Secure 来允许跨站点 cookie。

根据 Mozilla,您应该为您的 cookie 明确传达预期的 SameSite 策略(而不是依靠浏览器自动应用 SameSite=Lax),否则您可能会收到如下警告:

Cookie“myCookie”的“SameSite”政策设置为“Lax”,因为它缺少“SameSite”属性,而“SameSite=Lax”是该属性的默认值。

简单地删除 localhost cookie 的建议实际上并不能解决问题。解决方案是正确设置服务器正在设置的cookies的SameSite属性,并在需要时使用HTTPS。

Firefox 并不是唯一做出这些更改的浏览器。显然,我正在使用的 Chrome 版本(84.0.4147.125)已经实现了更改,因为我在控制台中收到了这条消息:

The previously mentioned MDN article 和 this article by Mike Conca 提供有关 SameSite cookie 行为更改的大量信息。

【讨论】:

【参考方案4】:

猜测您使用的是 WAMP 或 LAMP 等。您需要做的第一件事是在 WAMP 上启用 ssl,因为您会发现许多参考资料说您需要将 cookie 设置调整为 SameSite=None;安全 这意味着您的本地连接是安全的。此链接上有说明https://articlebin.michaelmilette.com/how-to-add-ssl-https-to-wampserver/ 以及一些 YouTube 视频。 需要注意的重要一点是,在创建 SSL 证书时,您应该使用 sha256 编码,因为 sha1 现在已被弃用,并且会引发另一个警告。 https://web.dev/samesite-cookies-explained/ 上对 SameSite cookie 有很好的解释 我一直在努力解决同样的问题,并通过确保启用 Apache 2.4 标头模块并添加一行代码来解决它

Header always edit Set-Cookie ^(.")$ $1;HttpOnly;Secure

我浪费了大量时间盯着 Inspector 中的同一组警告,直到我意识到 cookie 仍然存在并且需要清除。

Chrome 显然现在要引入新规则,但 Covid-19 意味着人们在家工作时可能会破坏很多网站。主要浏览器正在共同开发 SameSite 属性,因此它将很快生效。

【讨论】:

以上是关于Cookie “PHPSESSID” 将很快被视为针对 <file> 的跨站点 cookie,因为该方案不匹配的主要内容,如果未能解决你的问题,请参考以下文章

$_SESSION 创建但 $_SERVER['HTTP_COOKIE'] 中没有 PHPSESSID

在 PHP 中的 PHPSESSID cookie 上设置 httpOnly 和安全

php session cookie

PHP PHPSESSID 利用混乱

什么是 cookie 和会话,它们是如何相互关联的?

出现多个sessid