gpt4 book ai didi

cookies - Facebook 如何为 Canvas 页面上的 iFrame 设置跨域 cookie?

转载 作者:行者123 更新时间:2023-11-30 05:13:27 24 4
gpt4 key购买 nike

我在浏览 Facebook 的文档时阅读了有关 Canvas 应用程序的内容,并且遇到了一个示例应用程序: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 请求)解释为没有建立 session 的新请求。我苦苦挣扎,并通过使用 JSONP 和 javascript 为 foo.com 设置 cookie 而找到了解决此问题的方法...

...等等?

好吧,我正在查看示例 Canvas iframe Facebook 应用程序,我注意到他们的应用程序(托管在 runwithfriends.appspot.com 上)能够设置一个 cookie,u,与当前用户的id 以及 runwithfriends.appspot.com 域的一些其他参数。它会随每个请求发送此 cookie……它在 Chrome 和 Firefox 中都有效!什么鬼? Facebook 如何绕过 Chrome 上的跨域 cookie 限制?

(我现在已经知道答案了,但我认为这可能对任何努力弄清楚同一件事的人都有帮助——我将在下面发布答案。)

最佳答案

所以 iFrame 实际上并没有设置 u runwithfriends.appspot.com 域的 cookie。 Facebook 所做的是创建一个表单,<form action="runwithfriends.appspot.com/..." target="name_of_iframe" method="POST">并使用 javascript 在页面加载时提交表单。由于表单的目标是 iframe,它不会重新加载页面......它只是加载带有 POST 响应的 iframe。显然,即使是 Chrome 和其他具有严格 cookie 策略的浏览器,如果它们是 POST 请求,也会为跨域请求设置 cookie...

关于cookies - Facebook 如何为 Canvas 页面上的 iFrame 设置跨域 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4701922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com