我在浏览 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 设置 cookie 找到了解决方法......
... 所以?
好吧,我正在查看示例画布 iframe Facebook 应用程序,我注意到他们的应用程序(托管在 runwithfriends.appspot.com 上)能够设置一个 cookie,u
其中包含当前用户的 id 以及 runwithfriends 的一些其他参数。 apppot.com 域。它会随每个请求发送此 cookie……它适用于 Chrome 和 Firefox!怎么回事?Facebook 如何绕过 Chrome 上的跨域 cookie 限制?
(我现在已经知道答案了,但我认为这可能对任何努力找出相同问题的人有所帮助——我将在下面发布答案。)