Cookie 未在 IE11 windows 7 上为 iframe 应用程序设置

Cookies are not set on IE11 windows 7 for an iframe app

我正在使用 Outlook 网络 add-in 和 Rails 网络应用程序。 Web add-in 在通过 Outlook 网页版启用时作为 iframe 加载。该页面是我们 Rails 应用程序的登录页面。我们的 Rails 应用程序具有用于身份验证过程的标准 Devise 设置。

加载登录页面并输入正确的凭据并单击登录后,cookie 在整个过程中丢失,我们再次被重定向回登录页面。

当我们查看开发控制台中的“网络”选项卡时,我们看到正在请求 /users/sign_in 并且 returns 具有正确的响应 header 和 cookie放。成功点击 /users/sign_in 通常会将 iframe 重定向到 /dashboard/stats,并在 header 中包含所有正确的 session 和 cookie。然而,情况并非如此,我们看到 /dashboard/stats 的请求 header 没有正确的 cookies/sessions,而是它们丢失了。结果,在 Rails 应用程序中,我们看到没有适当的 cookies/devise session 并且将发送 401 并重定向回登录页面 /users/sign_in.

此问题仅在 Windows7 上的 Internet Explorer 11(版本:11.0.9600.19230)中出现。

我在 Windows 10 上用更高版本的 IE11 测试了同样的东西,它工作正常:所有 cookie 和 session 属性都设置正确,我们登录成功。我还在 Chrome、Safari 和 Firefox 上对此进行了测试,并且通过了相同的场景。不幸的是,我们需要在 Windows 7(或最新版本)上支持此版本的 IE11。

我想知道是否有人 运行 遇到过类似的问题 and/or 对于这些丢失的 cookie 的解决方案有什么见解。

浏览论坛后,似乎这是一个与 P3P header 有关的问题。请记住,我只发现它是上述 IE11 版本中的一个问题。我的最新版本 (IE 11.316.17763.0) 没有相同的问题。

基本上,在 IE11 中,如果 iframe 内的页面没有 P3P header,浏览器将阻止 cookie。您可以通过单击 查看 > 网页隐私报告...

来检查您的网页是否在 IE11 上被阻止

如果问题存在于您的 IE11 版本中,您会看到您的页面在 Cookie 列中 "Blocked"。

问题已通过在您的网络应用程序的响应 header 中包含 P3P header 得到解决。 您可以在 this post.

中阅读更多内容

如果您不确定 P3P 的价值 header,我建议通读这篇 related post

不过,P3P的概念似乎已经过时has been suspended,而且基于上面第一个post,你不必太担心header.

最后,我建议人们仅在检测到请求是从 IE11 浏览器发送时才确定添加 P3P header 的范围。这似乎只有 IE 强制执行:其他当前的现代浏览器没有这个问题。