2012-04-13 172 views
1

我开发了一个Facebook应用(iframe)。它工作正常。但是,当用户在浏览器中禁用第三方Cookie时,该应用会进入无限重定向循环。在浏览器中禁用第三方Cookie时,Facebook应用不起作用

请让我知道,如果你需要更多的信息来帮助我。

+0

请分享一些关于你用什么浏览器来产生这个问题的信息。 – Philip 2012-04-13 10:11:44

+0

嗨菲利普,我使用铬,火狐和Safari浏览器。 – 2012-04-16 07:17:16

回答

0

你确定你确实需要cookies吗?如果是这样,不幸的是,你无法做到这一点。如果您的应用需要使用Cookie,则需要用户支持第三方Cookie。但请检查以确保您发送的是P3P标题。某些浏览器需要valid P3P header才能允许第三方iframe Cookie 全部为,即使启用了第三方Cookie也是如此。

例外:

  • 如果你只需要一个请求,你可以仅仅依靠signed_request。
  • 您可以尝试使用基于URL的会话而不是基于Cookie的会话。 PHP有built-in support这个一定量,但与其他语言/框架,你可能要忍受更多的工作英寸

我猜你在做什么是试图将用户重定向到OAuth的对话,然后该对话框将用户发送回您的页面,对不对?对于OAuth对话框之后的第一个请求,您应该尝试从signed_request中获取认证信息。然后,您可能希望将其存储在服务器端会话中,并通过cookie或查询参数传递该ID的ID。我相信PHP和Python SDK都是这样做的。正如我上面所说的,如果cookie不起作用,您需要找出另一种方式来保持用户在应用程序中移动时的状态。

我的诚实推荐?尝试检测用户的浏览器是否不允许设置第三方Cookie,如果没有,则只需抛出一个错误页面,说明他们的安全设置不会让他们使用像您的那样酷的应用程序。

+0

谢谢安德鲁,我已经在你的最后一句中实施了这个建议,但该项目的其他利益相关者不喜欢这样做。我们相信必须有一些方法来解决这个问题,因为有很多Facebook应用程序(iframe),并且即使第三方cookie被禁用,大多数应用程序也能正常工作。 – 2012-04-16 07:22:52

+0

任何需要会话的应用程序都不会工作,除非它们在URL和POST参数中传递会话ID。否则,他们有一个非常简单的应用程序,不需要使用会话。 – AndrewF 2012-04-20 02:27:49

0

如果第三方cookie被禁用,会话将不会工作,session_id也会以cookie的形式存储。