Facebook 应用程序(iFrames)和第三方 Cookie

7
我有一个Rails应用程序,它在Facebook的iframe中运行。我使用Koala gem进行FB通信(也使用js SDK的一些部分),以及Devise作为身份验证基础。
有一段时间,我发现由于应用程序在iframe中运行,存在一些问题。所以无法设置第三方cookie。对于IE,我使用了P3P头文件,这在某种程度上缓解了问题。
但整个过程非常混乱。我在Snow Leopard上。
例如:
- 在Safari 5.1.1中,我设置了“阻止第三方和广告商cookies”,应用程序工作正常,可以无问题使用。 - 在Chrome 5.0.874(最近更新)中,选中了“阻止设置第三方cookie”选项,因此我的应用程序设置的两个主要cookie(应用程序cookie和fbs_xxxx cookie)无法设置,因此应用程序不工作,因为用户需要始终进行身份验证。 - 在Opera 11.52中,没有提到第三方cookie,并且浏览器设置为“仅接受我访问的网站的cookie”。我的应用程序在该设置下工作正常。 - 在Firefox 7.0.1中,我的应用程序可以正常工作,但我找不到任何处理cookie的设置,只能删除它们。
因此,显然我的问题出现在Chrome中,但是相同的设置在Safari中有效。所以我真的很困惑。
请求用户允许第三方cookie是解决此问题的唯一方法吗?
谢谢。
我的当前工作解决方案更新
我进行了一些额外的研究和测试。我尝试使用Rails替代会话存储方法。默认情况下,它们存储在cookie中,但是您可以将会话数据存储在内存、db等中。但这还不够,因为它仍然使用一个指向您选择的备选存储的cookie的指针。
最终,我在URL中设置了一些信息,以便找到当前登录用户的身份,获取该用户并使用Devise的sign_in方法手动登录该用户。我不太喜欢它,但现在我可以阻止第三方cookie而仍然有效。我以后会做出更改,而不是在那里放置实际信息,我会有一个指向memcached条目的键(之前设置),毕竟只有我的应用程序才能访问该memcached服务器。
谢谢。
2个回答

2
如果无法设置cookies,则在URL末尾设置一个会话ID。

3
可以举个例子来说明吗?谢谢。 - Bunlong

1

Firefox的Cookie设置位置相对不太直观。前往“工具”->“选项”->“隐私”,从下拉框中选择“自定义历史记录设置”,然后Cookie设置将出现。但是,如果您将它们设置为默认值,则它们将再次“消失”。

第三方Cookie的定义和处理存在较大的不一致性(例如,在Firefox中,禁止不仅涉及设置Cookie,还涉及读取Cookie)。因此,如果可能的话,我建议消除对Cookie的任何依赖。已经很难告诉用户他们必须启用听起来不安全的东西(更不用提为每个浏览器提供所有不同的说明),随着浏览器继续加强其默认设置,情况只会变得更糟。不幸的是,所有标准库似乎都想默认使用Cookie,因此这不是一项容易的任务,但如果您刚开始编写应用程序,我认为找到一种无需Cookie的方法值得一试。


Floyd和Derek,感谢你们的评论。在URL中设置会话ID不安全,Rails也不推荐这样做。但是Rails提供了其他存储会话信息的地方。上次我尝试时遇到了Devise的问题,因为它期望一个cookie,但我应该再试一次。是的,现在我在FF中找到了cookie设置,谢谢!那个设置真的藏得很深。 - Pod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接