【发布时间】:2011-12-15 18:26:24
【问题描述】:
我有一个 Rails 应用程序,它作为 iframe 在 Fabebook 内运行。我使用 Koala gem 进行 FB 通信(还有一些部分的 js SDK)和 Devise 作为身份验证基础。
一段时间以来,我发现应用程序在 iframe 中运行的问题存在一些问题。因此无法设置第三方 cookie。对于 IE,我使用 P3P 标头以某种方式缓解了问题。
但整个事情非常混乱。我在雪豹上。
例如:
在 Safari 5.1.1 中,我设置了“阻止来自第三方和广告商的 cookie”。 该应用程序运行正常,可以毫无问题地使用。
在 Chrome 5.0.874(最近的更新)中,“阻止设置第三方 cookie”选项已被选中,因此我的应用程序设置的两个主要 cookie(app cookie 和 fbs_xxxx cookie)无法设置,因此该应用程序无法运行,因为用户需要一直进行身份验证。
在 Opera 11.52 中没有提及第三方 cookie,并且浏览器设置为“仅接受来自我访问的站点的 cookie”。我的应用在该设置下运行良好。
使用 Firefox 7.0.1,我的应用程序可以运行,但我找不到任何处理 cookie 的设置。只是为了删除它们。
显然我的问题出在 Chrome 上,但同样的设置也适用于 Safari。所以我真的很困惑。
要求用户允许第三方 cookie 是解决此问题的唯一方法吗?
谢谢。
更新我目前的工作解决方案
我做了一些额外的研究和测试。我确实尝试使用 Rails 替代会话存储方法。默认情况下,它们存储在 cookie 中,但您可以将会话数据存储在内存、数据库等中。但这还不够,因为它仍然使用带有指向您选择的替代存储的指针的 cookie。
最后,我在 url 中设置了一些信息,让我可以找到当前登录用户的身份,获取用户并使用 Devises sign_in 方法手动登录该用户。我不太喜欢它,但现在我可以阻止第三方 cookie 并且仍然可以使用。稍后我将进行更改,而不是在那里获得真实信息,我将拥有一个 memcached 条目的密钥,我将从那里获取用户(以前设置),毕竟只有我的应用程序应该有权访问该 memcached 服务器。
谢谢。
【问题讨论】:
标签: ruby-on-rails facebook cookies