2009-09-06 92 views
16

我正在尝试使用PHP和Zend Framework构建一个Connect应用程序。 我也有一个基于Zend_Auth的用户认证系统。 现在,我可以使用Facebook登录,但注销不起作用。如何在PHP和Zend中使用Facebook Connect注销用户?

我需要清除Zend_Auth标识以及删除所有Facebook登录信息。 什么是最好的方法来做到这一点?

我打电话Zend_Auth::getInstance()->clearIdentity()

他们都不似乎工作后试图facebook_client->expire_session()facebook_client->clear_cookie_state();在一起,也facebook_client->logout($next)

回答

20

您必须先致电javascript客户端注销第一个,然后将它们发送到您的PHP注销脚本。所以,调用.js文件:

FB.Connect.logoutAndRedirect("/path/to/zend/logout/controller"); 

你会看到一个模式弹出,说:“你要登录这个网站和Facebook *您会被重定向到任何地方您注销脚本是:

try 
{ 
    $facebook->expire_session(); 
} 
catch (FacebookRestClientException $e) 
{ 
    //you'll want to catch this 
    //it fails all the time 
} 

我平时也呼吁在PHP脚本注销此功能,只要是安全的:

/** 
* Remove the local Facebook cookies that get set manually 
* 
* @return void 
*/ 
protected function _killFacebookCookies() 
{ 
    // get your api key 
    $apiKey = $this->getConfig()->getApiKey(); 
    // get name of the cookie 
    $cookie = $this->getConfig()->getCookieName(); 

    $cookies = array('user', 'session_key', 'expires', 'ss'); 
    foreach ($cookies as $name) 
    { 
     setcookie($apiKey . '_' . $name, false, time() - 3600); 
     unset($_COOKIE[$apiKey . '_' . $name]); 
    } 

    setcookie($apiKey, false, time() - 3600); 
    unset($_COOKIE[$apiKey]);  
} 
+0

谢谢!有用! :) – Abhinav 2009-09-07 13:28:17

+0

yeap,作品!测试它没有额外的功能_killFacebookCookies(),工作正常。 – Alex 2010-04-23 12:50:02

0

您可以注销facebook的用户,并给用户这样的PHP代码重定向到您的网站页面:

header(“Location:”。 $ facebook-> getLogoutUrl(阵列( '下一个'=> “http://yourwebsite.com/redirectAfterFacebookLogout.php”)));

0

(NEW FACEBOOK SDK) 对我来说,getconfig()不会工作。所以我不得不从base_facebook.php文件中找到新的函数,并在其中添加这一点代码。 然后在你的调用文件中调用它。在你做之前,调用$ facebook-> destroySession();

public function _killFacebookCookies() 
    { 
     // get your api key 
     $apiKey = $this->getAppId(); 
     // get name of the cookie 
     $cookie = $this->getSignedRequestCookieName(); 

     $cookies = array('user', 'session_key', 'expires', 'ss'); 
     foreach ($cookies as $name) 
     { 
      setcookie($apiKey . '_' . $name, false, time() - 3600); 
      unset($_COOKIE[$apiKey . '_' . $name]); 
     } 

     setcookie($apiKey, false, time() - 3600); 
     unset($_COOKIE[$apiKey]);   
    } 
相关问题