同一域上的不同页面显示不同的 cookie(按目标域)

Posted

技术标签:

【中文标题】同一域上的不同页面显示不同的 cookie(按目标域)【英文标题】:Different pages on same domain show different cookies (by target domain) 【发布时间】:2020-04-30 22:23:24 【问题描述】:

我有一个单点登录实现,当人们登录时,它会向网站添加 cookie。在查看一个页面时,我在 chrome Inspector 中看到了 cookie,但在同一域的另一个页面中却没有。

cookie 路径设置为“/”,因此所有文件都应该可用 消失的 cookie 的目标域是另一个域

当我转到网站上的一个页面时,我看到许多 cookie(包括各种目标域)。

当我转到同一域中的其他页面时,我看到的 cookie 较少(似乎都以本地域为目标

使用 Apache、SSL、Ubuntu,它是一个子域,它是一个会话 cookie,在 url 中使用完全相同的 https 和 www,都是标准的东西。

为什么同一域上的不同页面会显示不同的 cookie(在 chrome Inspector 中)?

显然这里的线索是 cookie 目标域,但为什么这是一个问题?

【问题讨论】:

如果有所不同,cookie 是由这个 OpenID 库生成的:github.com/jumbojett/OpenID-Connect-php 【参考方案1】:

只有在当前页面的上下文中发生对这些域的任何请求时,才会显示第三方 cookie。

假设您的域是 A,并且您在浏览器中为域 B 设置了 cookie。

您的页面1 嵌入了来自域B一些东西 - 可以是图像、脚本文件…… - 任何会导致对域B 进行实际HTTP 请求的任何东西。然后您将在开发工具中看到域 B 的 cookie。

您的页面2 但是没有嵌入来自域B 的任何此类资源。 B 的任何 cookie 现在实际上都不会“参与”此页面 2 上发生的事情 - 因此,当您在页面 2 上时,开发工具现在也不需要或没有理由显示它们。

【讨论】:

是的,我试过了,这就是它的工作原理!因此,即使 cookie 全局存在于站点上,该工具也不会显示它,除非页面上有对域的引用。调试非常混乱,因为它看起来好像从未收到过 cookie!

以上是关于同一域上的不同页面显示不同的 cookie(按目标域)的主要内容,如果未能解决你的问题,请参考以下文章

301 将所有页面重定向到新域上的同一页面

在同一域上的不同窗口之间进行通信[重复]

如果 cookie 设置为同一域上的所有子域,则删​​除 cookie 不起作用

在同一域上的站点之间共享 cookie - Headless / Decoupled CMS

允许子 iframe 从不同域调用其父窗口上的函数

将事件发送到不同域上的 iFrame?