【问题标题】:Keeping track of the Facebook session when navigating pages in iframe-based Facebook applications在基于 iframe 的 Facebook 应用程序中导航页面时跟踪 Facebook 会话
【发布时间】:2010-10-08 02:35:47
【问题描述】:

我正在开发一个基于 iframe 的画布应用程序,但在寻找一种在 iframe 内的页面之间导航时跟踪 Facebook 会话的好方法时遇到了主要障碍。在第一个页面加载时,Facebook 页面通过查询字符串将所有必要的 fb_sig 参数传递给您的回调 URL。在后续页面加载时(例如,在您的应用中单击链接后),您似乎必须执行以下操作之一才能保留 Facebook 会话详细信息:

  1. 在链接上使用target="_top",并在每次请求时重新加载整个 Facebook 页面。这样在加载 iframe 时会传入一组新的 fb_sig 参数。但这会产生每次更改页面时都加载 iframe 之外的所有内容的成本。

  2. 手动将您从第一页收到的所有fb_sig 参数附加到所有其他页面的 URL。这很丑陋,并且会给您留下可能不再准确的过时信息。您继续使用从 Facebook 收到的第一个值,但这些值可能从那时起发生了变化(例如用户注销或会话密钥到期),您无法知道。

  3. 将信息存储在 cookie 中,并以某种方式检查每个页面加载时的新值,并在必要时刷新它。我已经在几个地方看到过这种技术,但是经过几天的研究,我还没有找到一个如何实际执行此操作的示例。也许 PHP 客户端库会自动为您执行此操作,但我的应用程序使用 Perl 和 WWW::Facebook::API 模块,我还没有在其中找到任何解决此问题的内容。我还读到这种技术在某些浏览器(尤其是 Safari)上遇到问题,除非其域与父框架的域匹配,否则不允许您在 iframe 中设置 cookie。对于一个应用程序(导航到另一个页面)来说,什么是如此基本和必要的能力,所有这些似乎都非常复杂且文档很少。

由于我无法找到任何真正有用的示例来说明如何实现 #3,因此我目前倾向于 #1,尽管这可能是一种不幸的妥协。有没有人看到一个关于如何在所有主要浏览器中使用#3 的良好、完整的解释和示例?想在我放弃并选择#1之前我会问一下。

【问题讨论】:

  • 我遇到了同样的问题。我使用 PHP SDK - 它不会将会话对象保存在 cookie 中,因此除了使用您提到的黑客之外似乎别无他法。

标签: perl iframe facebook


【解决方案1】:

Jimmy Cuadra,我也遇到了同样的问题。 尝试将绝对路径放入 facebook 应用程序 (href="http://apps.facebook.YOURAPP/where_you_want_to_go.php")。然后选择#1 选项(target="_top")

希望它能解决您的问题。

【讨论】:

  • 这就是我最终要做的。这是非常低效的,但我发现没有其他方法可以保留一组新的 FB 参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-21
  • 2013-02-06
  • 1970-01-01
相关资源
最近更新 更多