我正在开发一个基于iframe的canvas应用程序,在iframe中的页面之间导航时,我遇到了一个主要的障碍,那就是如何找到一个跟踪Facebook会话的好方法。在第一个页面加载时,Facebook页面通过所有必要的
fb_sig
通过查询字符串将参数添加到回调URL。在随后的页面加载中(例如,单击应用程序中的链接后),似乎必须执行以下操作之一才能保留Facebook会话的详细信息:
-
使用
target="_top"
在链接和重新加载整个Facebook页面与每个请求。这样一套新的
fb\U信号
在加载iframe时传入参数。但这会导致每次更改页面时加载iframe之外的所有内容的成本。
-
手动附加所有
从第一页到所有其他页的URL接收的参数。这是相当丑陋的,并会留下过时的信息,可能不再是准确的。您继续使用从Facebook收到的第一个值,但这些值可能已经更改(例如用户注销或会话密钥过期),您无法知道。
-
将信息存储在cookie中,并在每次页面加载时以某种方式检查新值,必要时进行刷新。我在好几个地方见过这种技术,但经过几天的研究,我还没有找到一个真正做到这一点的例子。也许PHP客户机库会自动为您完成,但我的应用程序使用Perl和
WWW::Facebook::API
模块,我还没有找到任何能解决这个问题的东西。我还了解到,这种技术在某些浏览器(特别是Safari)中遇到了问题,这些浏览器不允许您在iframe中设置cookies,除非其域与父帧的域匹配。对于一个应用程序(导航到另一个页面)来说,所有这一切似乎都非常复杂,而且文档记录也很差
由于我一直找不到任何真正有用的例子来说明如何实现#3,我现在倾向于#1,尽管这是一个不幸的妥协。有没有人看到一个好的,完整的解释和例子,如何使用#3,在所有主要的浏览器工作?我想在我放弃和1一起去之前我会问的。