2009-09-06 106 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]);   
    }