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 响应)的 URL。但不是图片。
警告,例如在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->Privacy & Security
或Settings->Privacy & 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