我正在使用Outlook Web加载项和Rails Webapp。通过Web上的Outlook启用时,Web加载项将作为iframe加载。该页面是我们Rails应用程序的登录页面。我们的Rails应用具有用于身份验证过程的标准Devise设置。
在加载登录页面并输入正确的凭据并单击登录后,整个过程中 cookie都会丢失,我们将再次重定向回登录页面。
当我们查看开发控制台中的“网络”选项卡时,我们看到正在请求/users/sign_in
并返回带有要设置的正确响应标头和cookie。成功击中/users/sign_in
通常会将iframe重定向到/dashboard/stats
,并在标头中包含所有正确的会话和cookie。但是,事实并非如此,我们发现/dashboard/stats
的请求标头没有正确的cookie /会话,而是丢失了它们。结果,在Rails应用程序中,我们看到没有正确的cookie / devise会话,将发送401
并重定向回登录页面/users/sign_in
。
仅在Windows 7上的 Internet Explorer 11(版本:11.0.9600.19230)会发生此问题。
我已经在Windows 10的更高版本的IE11上测试了同样的东西,并且工作正常:所有cookie和会话属性均已正确设置,并且我们成功登录。我也在Chrome,Safari和Firefox上进行了测试,并且通过了相同的方案。不幸的是,我们需要在Windows 7上支持此版本的IE11(或最新版本)。
我想知道是否有人遇到过类似的问题和/或对这些丢失的cookie的解决方案有什么见识。
答案 0 :(得分:1)
在浏览了各个论坛之后,看来这是与 P3P标头有关的问题。请记住,我只是发现它是上述IE11版本中的问题。我拥有的最新版本(IE 11.316.17763.0)没有相同的问题。
基本上,在IE11中,如果iframe中的页面没有P3P标头,则浏览器将阻止cookie。您可以通过单击查看>网页隐私报告...
来检查您的网页是否在IE11上被阻止。如果该问题出现在IE11版本中,则您会在Cookie列上看到您的页面“被阻止”。
通过在Webapp的响应标头中包含P3P标头可以解决此问题。 您可以在this post中阅读更多内容。
如果您不确定P3P标头的值,建议您通读related post。
但是,P3P概念似乎已经过时,has been suspended,根据上面的第一篇文章,您不必太担心标题的值。
最后,我建议人们仅在检测到请求是从IE11浏览器发送来的情况下,才对P3P标头的范围进行限定。这是只有IE似乎可以强制执行的操作:其他当前的现代浏览器没有此问题。