iframe中的Facebook Connect应用程序无法在IE7中运行

时间:2009-02-16 18:10:06

标签: cookies facebook

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

 'A session key is required for calling this method'

我认为这是由于IE处理第三方cookie的方式,因为如果我转到Internet选项/隐私/高级,并检查覆盖自动cookie处理并接受所有cookie,它可以正常工作。我无法通过javascript传递Facebook ID,因为任何人都可以篡改它。

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

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

4 个答案:

答案 0 :(得分:7)

您是否尝试过添加P3P政策?

如果设置cookie的响应具有紧凑策略,IE将使用它来确定是否允许第三方cookie。

答案 1 :(得分:3)

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

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

// Validate from Facebook that session is valid and user is logged in. require_once 'facebook/facebook.php'; $facebook = new Facebook(YourAppsAPIKeyPublic, YourAppsAPIKeySecret); $facebook->api_client->session_key = $this->userAPISessionKey; $fb_user_id = $facebook->api_client->users_getLoggedInUser();

$ fb_user_id现在应该具有有效的FaceBook用户ID。

关于隐私政策和facebook连接+ IE 7:

虽然这对我不起作用,但似乎对其他人有效。在HTAccess中:

Header append P3P "CP=\"HONK\""

或在PHP文件中:

header('P3P: CP="CAO PSA OUR"'); 要么 header('P3P: CP="HONK"');

参考:http://forum.developers.facebook.com/viewtopic.php?id=28636

ASP.NET:

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

答案 2 :(得分:1)

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

这真的很难看,因为它打开了两个弹出窗口,但至少它有效。我将检测是否使用javascript启用了cookie,如果启用了它,我将跳过第一个弹出窗口。

我仍然愿意接受更好的解决方案......


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

答案 3 :(得分:0)

你可能也希望看到这个帖子,这是在Facebook开发者平台下创建的

http://forum.developers.facebook.com/viewtopic.php?id=452