Facebook应用(iframe)和第三方Cookie

时间:2011-10-26 14:02:26

标签: ruby-on-rails facebook cookies

我有一个Rails应用程序在Fabebook中作为iframe运行。我使用Koala gem进行FB通信(某些部分也使用js SDK)和Devise作为身份验证基础。

有一段时间我发现应用程序在iframe中运行的问题存在一些问题。因此无法设置第三方cookie。对于IE,我使用P3P标头,以某种方式缓解问题。

但整件事情非常令人困惑。我在Snow Leopard上。

例如:

  • 使用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。

最后,我设置了一些信息,该网址允许我找到当前登录用户的身份,获取用户并使用Devises sign_in方法手动登录该用户。我不太喜欢它,但现在我可以阻止第三方cookie并仍然有效。我稍后会进行更改,而不是在那里有真正的信息,我将获得一个memcached条目的密钥,从那里我将获得用户(之前设置),毕竟只有我的应用程序应该有权访问该memcached服务器。

感谢。

2 个答案:

答案 0 :(得分:2)

如果无法设置Cookie,请在网址末尾设置会话ID。

答案 1 :(得分:1)

Firefox的Cookie设置非常直观。转到工具 - >选项 - >隐私,然后从下拉框中选择“使用历史记录的自定义设置”,然后会显示Cookie设置。但如果将它们设置为默认值,它们将再次“消失”。

第三方cookie的定义和处理存在很大的不一致(例如在Firefox中,禁止不仅仅是设置cookie而是阅读它们)。出于这个原因,我建议,如果可能的话,消除对cookie的依赖。已经很难告诉用户他们必须启用听起来不安全的东西(更不用说提供关于如何为每个浏览器执行此操作的所有不同说明),并且随着浏览器继续收紧其默认设置,情况会变得更糟。不幸的是,所有标准库似乎都希望默认使用cookie,所以这不是一件容易的事,但如果你刚刚开始编写你的应用程序,我认为值得尝试找到一种无法实现的cookie。球棒。