【发布时间】:2010-10-08 02:35:47
【问题描述】:
我正在开发一个基于 iframe 的画布应用程序,但在寻找一种在 iframe 内的页面之间导航时跟踪 Facebook 会话的好方法时遇到了主要障碍。在第一个页面加载时,Facebook 页面通过查询字符串将所有必要的 fb_sig 参数传递给您的回调 URL。在后续页面加载时(例如,在您的应用中单击链接后),您似乎必须执行以下操作之一才能保留 Facebook 会话详细信息:
在链接上使用
target="_top",并在每次请求时重新加载整个 Facebook 页面。这样在加载 iframe 时会传入一组新的fb_sig参数。但这会产生每次更改页面时都加载 iframe 之外的所有内容的成本。手动将您从第一页收到的所有
fb_sig参数附加到所有其他页面的 URL。这很丑陋,并且会给您留下可能不再准确的过时信息。您继续使用从 Facebook 收到的第一个值,但这些值可能从那时起发生了变化(例如用户注销或会话密钥到期),您无法知道。将信息存储在 cookie 中,并以某种方式检查每个页面加载时的新值,并在必要时刷新它。我已经在几个地方看到过这种技术,但是经过几天的研究,我还没有找到一个如何实际执行此操作的示例。也许 PHP 客户端库会自动为您执行此操作,但我的应用程序使用 Perl 和
WWW::Facebook::API模块,我还没有在其中找到任何解决此问题的内容。我还读到这种技术在某些浏览器(尤其是 Safari)上遇到问题,除非其域与父框架的域匹配,否则不允许您在 iframe 中设置 cookie。对于一个应用程序(导航到另一个页面)来说,什么是如此基本和必要的能力,所有这些似乎都非常复杂且文档很少。
由于我无法找到任何真正有用的示例来说明如何实现 #3,因此我目前倾向于 #1,尽管这可能是一种不幸的妥协。有没有人看到一个关于如何在所有主要浏览器中使用#3 的良好、完整的解释和示例?想在我放弃并选择#1之前我会问一下。
【问题讨论】:
-
我遇到了同样的问题。我使用 PHP SDK - 它不会将会话对象保存在 cookie 中,因此除了使用您提到的黑客之外似乎别无他法。