5

我正在构建一个在 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

4 回答 4

7

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

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

于 2009-02-17T03:01:00.770 回答
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 connect + 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\"");
}
于 2009-06-30T18:20:41.393 回答
1

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

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

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


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

于 2009-02-16T20:17:12.970 回答
0

你可能还想看看这个线程,它是在 facebook 开发者平台下创建的

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

于 2010-03-22T11:38:46.747 回答