2011-10-06 49 views
8

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

User1从我的网站注销,但不是Facebook。

此用户2登录到他的帐户后,但来自用户1的剩余会话与用户2与我的网站进行交互以及他们作为用户发布的内容。

所以要解决这个问题,我做了检查,如果登录的用户实际上拥有当前登录的脸书(这将导致他们去Facebook登出等),它显示的链接应该允许用户注销...

点击链接后,他们去facebook并返回到网站。但是,如果你打开一个新的标签,并去Facebook的用户1仍然登录。

我怎样才能得到这个链接工作..发生了什么事。这是一个错误的API或什么?...

编辑:我一直在继续测试价值用户ID加载和有效访问令牌,但我还没有得到注销链接工作。

+0

>此用户2登录到他的帐户后,但来自用户1的剩余会话与用户2与我的网站进行交互以及他们作为用户发布的内容。用户2是否在同一台计算机/浏览器上登录,或“会话”如何混淆?你能详细说明一下吗,“会话”究竟是什么意思? – CBroe

+0

是的,同一浏览器。这是不太可能的情况,因为无论如何,当离开计算机时,人们很可能会注销他们的Facebook帐户,但问题仍然需要解决。基本上,如果Facebook登录为Person 1,但在我的网站Person 2登录时,Person 1仍然登录Facebook,则Person 2在我的网站上执行的任何操作都会为Person 1提取Facebook信息。我可以检测到目前登录的Facebook帐户和当前在我的网站上登录的用户是一个一样的,但如果不是,我需要一种先登录人脸1从Facebook的 – Tom

+0

....所以我可以重定向人2到Facebook身份验证screen – Tom

回答

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']); 

$这个 - > getAppID是你的Facebook应用程序ID,应该清楚; O)

+0

如果登录Facebook的用户没有连接到我的应用? – Tom

+0

如果用户没有连接到您的应用程序,用户如何在您的页面上登录?我不知道这是否可能......但是:在完成此操作后,用户将被明确注销。 (当Facebook重定向到你的页面时,你必须这么做......) –

+0

如果人1登录Facebook并离开计算机,但Facebook仍然登录。然后user2登录到我的网站。由于其他用户仍然登录,因此会显示一个权限对话框,要求他们将帐户链接在一起,这意味着新用户可以将我的网站上的帐户与其他人的Facebook帐户关联起来。我想避免这种情况,如果Facebook帐户与用户以前连接的帐户不同,那么iy不应允许他们将其链接起来,而是注销广告,要求他们登录到正确的Facebook帐户。 – Tom

0

一您可以通过使用PHP SDK和JavaScript SDK一起检查这种方式。

当用户访问您的网站,拨打FB.getLoginStatus()和检查authResponse.userID比赛什么$facebook->getUser();的PHP SDK收益(你可以通过AJAX调用做到这一点,如果有帮助)。

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

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

5

晚了一点,但在这里不用我的贡献:

使用PARAMS当你产生注销网址,因此会被重定向到您使用的是Facebook的API函数破坏了会议的页面。

下面的例子:

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

在page4logout可以例如facebook的对象,并执行以下命令:

$facebook->destroySession(); 

之后,你可以做一个重定向。

+0

我按照您的建议做了,但没有在其他页面中。 $ facebook-> destroySession();必须发生在$ facebook = new Facebook(array(..是。)的同一页面中,所以我使用参数?logout = 1重定向到同一页面,然后在$ facebook = new Facebook后检查它数组(并且它工作。 – themis

+0

@themis,请问为什么不接受这个答案?或者,如果有其他解决了你的问题,只需表明接受。我只是认为这是正确的。谢谢。 –