我当前的用户故事是user1登录到我的网站和facebook(这些帐户已连接等)。
User1退出我的网站但不登录Facebook。
此user2登录后,但user1的剩余会话与user2与我的网站的互动以及他们发布的帖子有关。
所以为了解决这个问题,我检查了登录的用户是否实际拥有当前登录的facebook(这会导致他们进入facebook登出等),并显示一个应该允许用户登录的链接出...
点击链接后,他们会转到Facebook并返回该网站。但是,如果您打开一个新标签并转到Facebook,User1仍然会登录。
如何让这个链接起作用..发生了什么。这是api的错误还是什么?...
编辑:我继续使用有价值的用户ID加载和有效的访问权限来测试,但我还没有让注销链接起作用。
答案 0 :(得分:5)
有点晚了,但这是我的贡献:
在生成注销网址时使用params,重定向到使用Facebook API函数销毁会话的页面。
这是一个例子:
$logoutUrl = $facebook->getLogoutUrl(array("next" => "http://mydomain.com/page4logout"));
在page4logout中,您可以实例化facebook对象并执行以下命令:
$facebook->destroySession();
之后,您可以进行重定向。
答案 1 :(得分: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 App ID,应该是明确的; o)
答案 2 :(得分:0)
您可以通过一起使用PHP SDK和JavaScript SDK来检查这一点。
当用户访问您的站点时,调用FB.getLoginStatus()并检查authResponse.userID
是否匹配PHP SDK在$facebook->getUser();
中返回的内容(如果有帮助,您可以通过AJAX调用执行此操作)
你知道如果用户ID不匹配,那么这里有些问题。调用$ facebook-> getLogoutUrl()会将用户从您的网站和Facebook中注销,但如果没有,请尝试在代码中使用session_destroy()
来清除会话。然后将用户重定向回$ facebook-> getLoginUrl()并让他们再次登录。这将纠正用户ID中的不匹配,您可以在他们返回您的网站时重复此过程。
我已经在其他应用上看到过这种情况,这让我相信这是一个Facebook问题。 JavaScript SDK似乎不会检查cookie是否仍然有效(如果它已经存在)。