在Facebook Connect注销后,Facebook PHP类仍然认为用户已登录

时间:2009-10-23 21:11:47

标签: php facebook

当用户首次访问我网站的登录屏幕时,我让Facebook Connect确定用户是否登录Facebook并重新加载页面如果为true:

<script type="text/javascript" src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php"></script>

<script type="text/javascript">
  FB.init('MY_API_KEY', '/xd_receiver.htm', { 'reloadIfSessionStateChanged': true });
</script>

当重新加载页面时,我的后端PHP代码会检查用户是否登录到Facebook,然后自动将其登录到我的网站:

$Facebook = new Facebook(MY_API_KEY, MY_APP_SECRET);

if ($Facebook->get_loggedin_user()) {
  // Log the user in.
}

那部分工作正常。问题在于注销功能。我的退出链接目前看起来像这样:

<a href="#" onclick="FB.Connect.logoutAndRedirect('http://my.url/logout/');">Log Out</a>

点击后,用户成功退出Facebook,但后端Facebook PHP对象仍然认为用户已登录($Facebook->get_loggedin_user()仍然返回其用户ID),因此我的登录代码会将其记录下来再次自动。

所以我发现的问题是,即使Facebook Connect将用户注销,后端Facebook PHP对象仍然认为用户已登录。有人知道如何克服这个问题吗?我可以不使用我的PHP代码自动登录用户吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

我刚刚帮助过有类似问题的人。基本上,你需要使facebook会话到期,然后清理cookie(这有点棘手,而且在文档中没有真正解释过):

How to log out users using Facebook Connect in PHP and Zend?

如果有帮助则投票;)

答案 1 :(得分:1)

由于我必须清除我的COMPLETE会话(用户必须注销),这对我来说完全没问题:

1。)在facebook上注销用户:

$redirectUrl = $this->getFacebook()->getLogoutUrl(array(
            'next' => $this->baseUrl.'/logout',
        ));
$this->redirect($redirectUrl);

2。)从Facebook上退回后,在我的网络应用程序中注销用户:

public function logoutAction()
{
        session_destroy();        
        // redirect back to start page
        return $this->redirect($this->baseUrl);
}

答案 2 :(得分:0)

您可以设置自己的变量来标记何时发生这种情况,作为解决方法?