Aar*_*ter 68 cookies iframe facebook facebook-iframe
我正在浏览关于canvas应用程序的Facebook文档,我遇到了一个示例应用程序:http://developers.facebook.com/docs/samples/canvas.然而,当我阅读他们的例子时,我对他们在iframe应用程序中使用cookie感到非常困惑.
一个小背景...
我已经玩过使用iframes嵌入式小部件(与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的一些其他参数. appspot.com域名.它会在每个请求中发送此cookie ...它可以在Chrome和Firefox中运行!WTF?Facebook如何解决Chrome上的跨域cookie限制?
(我现在已经知道了答案,但我认为这可能对那些努力弄清楚同样事情的人有所帮助 - 我将在下面发布答案.)
Aar*_*ter 70
因此,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 ...
| 归档时间: |
|
| 查看次数: |
47781 次 |
| 最近记录: |