2011-02-01 30 views
0

我知道这个话题已被广泛报道,但我完全陷入困境,需要一些方向和新的意见。我有一个完全适用于IE6,8,Safari,Chrome,FF等的Facebook iFrame应用程序。只有IE7让我感到悲伤。Facebook的iFrame应用程序 - IE7不允许cookies

我已经创建了一个P3P策略文件及其关联的XML文件。该政策与P3P策略验证人完全验证。

只要iFrame从Facebook内部加载,就会出现红眼图标,当我点击它时,它会报告来自iFrame域的cookie被阻止。我已确认在IE7上设置了默认的“中等”隐私设置。有趣的是,我发现通过删除Google Analytics,页面将在不阻止Cookie的情况下初始加载,但只要页面重新加载或用户登录,cookie即会再次被阻止,即使P3P标题是从每个页。所有资产都是通过S3发送的,所以在那里不应该有任何问题。

仅供参考,这是我的P3P文件;我已经尝试了绝对路径,相对路径,CP和policyref的切换顺序,并将两者分隔开来,但没有运气。

header('P3P: CP="NON DSP TAIa PSAa PSDa OUR IND UNI", policyref="/w3c/p3p.xml"'); 

我已确认P3P标题正在被浏览器发送和接收。我已经在HTML页面添加了一个META p3p标签。我已删除所有重定向。问题仍然存在。我花了很多时间来研究这个问题,现在我已经没有想法了。任何有关如何从新的角度来看待这个想法或想法将不胜感激。我在NGINX上使用PHP 5.3.5。没有框架正在使用...

回答

0

我有同样的问题。 Facebook的iframe应用程序在除IE7以外的所有浏览器中运行良好。当你第一次去应用程序它加载罚款。但是当你点击一个链接时,它会加载页面,但是在一秒钟之后会刷新并重定向浏览器。最后你只是得到一个空白页面。我也有红眼图标阻止饼干。

的罪魁祸首竟然是javascript代码,它加载了Facebook的JavaScript LIB:

FB.init({ 
      appId : '<?=FACEBOOK_APP_ID?>', 
      status : true, // check login status 
      cookie : true, // enable cookies to allow the server to access the session 
      xfbml : true // parse XFBML 
     }); 

要解决我改变现状的问题:真正的,到状态:假。现在点击链接时,页面加载并不刷新。

所以最近真的在这里我不知道,但我有一个猜测...重定向是由FB javavascript检查登录状态,并由于某种原因认为用户已注销,因此重定向到一个登录页面。我猜想服务器端登录脚本会看到你确实已经登录并将你重定向回应用程序。等等等等。

所以IE7的问题没有设置在iframe中设置cookie仍然存在,邪恶的眼睛依然存在。但只要iframe中的链接引用指向Facebook画布页的父窗口target =“_ top”,似乎无论如何您都不需要cookie。 PHP SDK在以$ _REQUEST开头的许多地方查找会话。我猜测,当facebook加载iframe时,它会在查询字符串中包含会话参数。所以即使cookie通过iframe在IE7中不起作用,您的服务器脚本仍然会从查询参数中获取它们。

希望能使某种感觉,我不完全得到它,但它修复了我的应用程序。

+0

嗨Peter:很有意思,谢谢你的解释。不幸的是,我们的请求是通过AJAX进行的,所以硬刷新不是一种选择。我们最终做的是存储在一个JSON对象所需的数据,并验证了在提交数据,如果我们有一个有效的会话,否则(IE7),提交的数据。由于该应用程序只能在短时间内运行,因此我们并不太在意伪造的数据。 我们也使用JS SDK杀无效会话(只有这样,因为FB的状态饼干通过它们的域管理),所以不能去因为这个原因这条路线也是如此。 – Tyler 2011-02-08 16:15:05

0

我不知道,但也许这会帮助,它像我的应用程序的魅力。

header('P3P: CP="CAO PSA OUR"'); 
ob_start(); 
session_start(); 
相关问题