当用户首次访问我网站的登录屏幕时,我让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代码自动登录用户吗?
感谢您的帮助!
答案 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)
您可以设置自己的变量来标记何时发生这种情况,作为解决方法?