Cookies iframe中的Facebook Connect应用程序在IE7中不工作

Cookies iframe中的Facebook Connect应用程序在IE7中不工作,cookies,facebook,Cookies,Facebook,我正在构建一个运行在谷歌小工具中的Facebook Connect应用程序。作为小工具意味着应用程序在iframe中运行。在应用程序内部,有一个允许注册用户发表评论的表单。提交是使用AJAX进行的,但我得到的结果与普通表单相同。问题是我需要获取用户的facebook id。在Firefox中,它可以正常工作,但在Internet Explorer 7中,我得到以下错误: 'A session key is required for calling this method' 我相信这是由于IE

我正在构建一个运行在谷歌小工具中的Facebook Connect应用程序。作为小工具意味着应用程序在iframe中运行。在应用程序内部,有一个允许注册用户发表评论的表单。提交是使用AJAX进行的,但我得到的结果与普通表单相同。问题是我需要获取用户的facebook id。在Firefox中,它可以正常工作,但在Internet Explorer 7中,我得到以下错误:

 'A session key is required for calling this method'
我相信这是由于IE处理第三方cookie的方式,因为如果我转到Internet选项/隐私/高级,并选中Override automatic cookie handling并接受所有cookie,它工作正常。我无法从javascript传递Facebook id,因为任何人都可以篡改它

编辑:如果我直接打开iframe的内容,应用程序工作正常。这个问题实际上是由于IFRAME和IE安全模型造成的


我做错什么了?如何解决这个问题?

我找到了一个解决方法,虽然有点难看:当用户单击“登录”按钮时,它会打开一个弹出窗口,该窗口来自我自己的网站,其中包含Facebook Connect登录按钮。用户登录后,我关闭弹出窗口并重新加载iframe

这真的很难看,因为它会打开两个弹出窗口,但至少它可以工作。我将检测Cookie是否使用javascript启用,如果启用,我将跳过第一个弹出窗口

我仍然对更好的解决方案持开放态度



编辑:Facebook现在在我的弹出窗口中使用“假”弹出窗口,而不是打开另一个窗口。现在我只有一个弹出窗口,这对我来说还可以。

您是否尝试添加P3P策略


如果响应设置cookie具有压缩策略,IE将使用该策略确定是否允许第三方cookie。

我通过修改如何检查用户在FB connect登录后是否登录PHP页面,解决了相同的问题

所以,他们用IE7登录FB Connect。 下一个和后续页面加载需要验证它们是否确实登录到FaceBook我使用了以下代码(注意$FaceBook->require_login()和其他函数不起作用-它们仅在IE 7中返回null):

//从Facebook验证会话是否有效,用户是否已登录。
需要一次“facebook/facebook.php”;
$facebook=新facebook(YourAppsAPIKeyPublic,YourAppsAPIKeySecret);
$facebook->api_客户端->会话_密钥=$this->UserAPIssessionKey;
$fb_user_id=$facebook->api_client->users_getLoggedInUser()

$fb_user_id现在应该有一个有效的FaceBook用户id

关于隐私政策和facebook connect+IE 7: 虽然这对我不起作用,但似乎对其他人起作用。在HTAccess中:

标题追加P3P“CP=\”鸣笛\“

或在PHP文件中:

header('P3P:CP=“CAO-PSA-OUR””)
标题('P3P:CP=“HONK”')

参考:

ASP.NET:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\"");
}

你可能也想看到这个帖子,它是在facebook开发者平台下创建的


嗨,我不知道那件事。我会调查的。谢谢!我在第三方网站的覆盖iframe中运行的Facebook Connect应用程序遇到了类似的问题,除了Safari和Firefox也有问题,如果用户选择不接受第三方cookie。您是否看到了同样的问题,或者我遗漏了什么?我没有尝试阻止其他浏览器上的第三方cookie,但这会导致同样的问题。我寻求打开弹出窗口的解决方案。事实上,Facebook现在在我的弹出窗口中使用了一个“假”弹出窗口,而不是打开另一个窗口,这对我来说没问题。在你的代码中,你使用“$this->userAPISessionKey”,那么“this”引用了什么对象??谢谢:D