2009-10-23 132 views
2

当用户第一次打我的网站的登录画面,我有Facebook连接确定用户是否登录到Facebook和重新载入页面,如果真:Facebook连接注销后,Facebook的PHP类仍然认为用户登录

<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连接记录用户出,后端Facebook PHP对象仍然认为用户登录。有谁知道如何克服这一点?我可以不用我的PHP代码自动登录用户吗?

感谢您的帮助!

+0

尝试有问题​​的网页上倾倒你的Facebook相关的cookies。我不认为应该有什么,当你到达那里。 – 2009-10-23 23:52:43

+0

我描述了这个相同的问题http://stackoverflow.com/questions/1546277/trouble-logging-out-of-a-facebook-connect-site-and-destroying-sessions – Xeoncross 2009-11-10 23:18:13

回答

0

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

+0

是的,我可以,但我想一些更优雅。看起来我的场景很常见?别人没有按照我的方式去做吗? – 2009-10-23 21:34:33

1

因为我不得不清除我的完整的会话(用户已被注销),这个工作完全正常,我:

1)在Facebook的注销用户:

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

2)从Facebook在我的web应用程序注销用户,后反弹回:

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