我浏览了 Facebook 的文档,阅读了关于画布应用程序的内容,我发现了一个示例应用程序: http://developers.facebook.com/docs/samples/canvas。然而,当我通读他们的示例时,我对他们在 iframe 应用程序中使用 cookie 感到非常困惑。
一个小小的背景故事。
我已经尝试过将 iframe 用于可嵌入的小部件(与 Facebook 无关) ,我发现一些浏览器(Chrome、 Safari 等)有严格的 cookie 策略,不允许在 iframe 中设置跨域 cookie (而 Firefox 则允许 iframe 在 iframe 中设置跨域 cookie)。例如,如果 foo.com 有一个带有 src="http://bar.com/widget"
的 iframe,那么 iframe 小部件将无法为 bar.com 设置任何 cookie,因此在 iframe 中持久化状态将遇到麻烦: bar.com 将把来自该小部件的每个请求(包括 ajax 请求)解释为一个没有建立会话的新请求。我努力了一下,找到了一种方法,使用 JSONP 和 javascript 为 foo.com 设置 cookies..。
然后呢?
好吧,我看过一个名为 u
,其中包含当前用户的 id 以及一些其他的域名参数。它每次请求都会发送这个 cookie... ... 而且它可以在 Chrome 和 Firefox 上运行!卧槽?Facebook 如何绕开 Chrome 的跨域 cookie 限制?
(我现在已经知道答案了,但是我想这可能对任何想要弄清楚同样问题的人有帮助——我将在下面发布答案。)