8

我当前的用户故事是 user1 登录到我的网站和 Facebook(这些帐户已连接等)。

User1 退出我的网站,但没有退出 Facebook。

在此用户 2 登录他的帐户后,用户 1 的剩余会话与用户 2 与我的网站的交互以及他们发布的身份有关。

因此,为了解决这个问题,我检查了登录的用户是否真的拥有当前登录的 facebook(这将导致他们退出 facebook 等),并显示一个应该允许用户注销的链接。 .

单击链接后,他们会转到 facebook 并返回该站点。但是,如果您打开一个新标签并转到 facebook,则 User1 仍处于登录状态。

我怎样才能让这个链接工作..发生了什么事。这是api的错误还是什么?...

编辑:我继续使用加载值用户 ID 和有效访问令牌进行测试,但我还没有让注销链接正常工作。

4

3 回答 3

5

有点晚了,但这是我的贡献:

生成注销 url 时使用参数,重定向到您使用 Facebook API 函数销毁会话的页面。

这里有一个例子:

$logoutUrl = $facebook->getLogoutUrl(array("next" => "http://mydomain.com/page4logout"));

在 page4logout 中,您可以实例化 facebook 对象并执行以下操作:

$facebook->destroySession();

之后,您可以进行重定向。

于 2012-11-22T20:26:36.453 回答
4

手动删除 facebook cookie 和会话。这是我前段时间如何解决问题的解决方案,它认为这是 Facebook 的错误:

setcookie('fbs_'.$this->getAppId(), '', time()-100, '/', $_SERVER["SERVER_NAME"]);
unset($_SESSION['fb_'.$this->getAppId().'_code']);
unset($_SESSION['fb_'.$this->getAppId().'_access_token']);
unset($_SESSION['fb_'.$this->getAppId().'_user_id']);
unset($_SESSION['fb_'.$this->getAppId().'_state']);

$this->getAppID 是你的 Facebook 应用 ID,应该清楚;o)

于 2012-05-31T15:27:13.843 回答
0

检查这一点的一种方法是同时使用 PHP SDK 和 JavaScript SDK。

当用户访问您的站点时,调用 FB.getLoginStatus() 并检查authResponse.userIDPHP SDK 返回的内容是否匹配$facebook->getUser();(如果有帮助,您可以通过 AJAX 调用执行此操作)。

您知道,如果用户 ID 不匹配,那么这里就有问题。调用 $facebook->getLogoutUrl() 应该将用户从您的网站和 facebook 中注销,但如果没有,请尝试session_destroy()在您的代码中使用以清除会话。然后将用户重定向回 $facebook->getLoginUrl() 并让他们再次登录。这将纠正用户 ID 中的不匹配,当他们返回您的站点时,您可以重复该过程。

我在其他应用程序上看到过这种情况,这让我相信这是一个 facebook 问题。JavaScript SDK 似乎不会检查 cookie 是否仍然有效(如果它已经存在)。

于 2012-06-01T16:08:42.830 回答