iframe 中的页面看不到自己的 cookie
Page within iframe not seeing its own cookies
我有一个有趣的难题。
我们在不同的域上有 2 个网站。为简单起见,假设它们是:
- “应用程序”:运行
main-app.com/app
上的 SPA 应用程序
- “主机”:
random-site.com/index.html
上的一个简单 index.html 页面 运行。 index.html 页面仅包含一个显示应用程序的 iframe(指向 main-app.com/app
)。
当我作为用户转到应用程序 (main-app.com/app
) 并在那里登录时,它会在我的浏览器中设置一个会话 cookie,用于标识会话。但是,当我转到主机页面 (random-site.com/index.html
) 并加载应用程序的 iframe 时,不会发送会话 cookie。当我在网络检查器中查看它时,它只是被忽略了。
为什么会这样?是什么阻止了 cookie 的发送,我们如何解决这个问题?
(我们控制了两个站点)
您在使用 Google Chrome 吗?
在 Google Chrome 中,cookie 的默认属性已更改为 samesite=lax。 samesite=lax cookie 不在 iframe 中发送。此更改的目的是减轻 CSRF 等攻击。
如果您使用 Firefox,您应该仍然在 iframe 中的页面上登录。
我有一个有趣的难题。
我们在不同的域上有 2 个网站。为简单起见,假设它们是:
- “应用程序”:运行
main-app.com/app
上的 SPA 应用程序
- “主机”:
random-site.com/index.html
上的一个简单 index.html 页面 运行。 index.html 页面仅包含一个显示应用程序的 iframe(指向main-app.com/app
)。
当我作为用户转到应用程序 (main-app.com/app
) 并在那里登录时,它会在我的浏览器中设置一个会话 cookie,用于标识会话。但是,当我转到主机页面 (random-site.com/index.html
) 并加载应用程序的 iframe 时,不会发送会话 cookie。当我在网络检查器中查看它时,它只是被忽略了。
为什么会这样?是什么阻止了 cookie 的发送,我们如何解决这个问题?
(我们控制了两个站点)
您在使用 Google Chrome 吗? 在 Google Chrome 中,cookie 的默认属性已更改为 samesite=lax。 samesite=lax cookie 不在 iframe 中发送。此更改的目的是减轻 CSRF 等攻击。 如果您使用 Firefox,您应该仍然在 iframe 中的页面上登录。