如何使用PHP和Zend中的Facebook Connect注销用户?

时间:2009-09-06 19:56:56

标签: php facebook zend-framework frameworks

我正在尝试使用PHP和Zend Framework构建Connect应用程序。 我还有一个基于Zend_Auth的用户身份验证系统。 现在,我可以使用Facebook登录,但注销无效。

我需要清除Zend_Auth身份以及删除所有Facebook登录信息。 最好的方法是什么?

我在调用facebook_client->expire_session()

之后一起尝试了facebook_client->clear_cookie_state();facebook_client->logout($next)以及Zend_Auth::getInstance()->clearIdentity()

它们似乎都不起作用。

3 个答案:

答案 0 :(得分: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]);       
}

答案 1 :(得分:0)

您可以退出Facebook用户并使用以下PHP代码将用户重定向到您的网站页面:

标题(“位置:”。$ facebook-> getLogoutUrl(array('next'=>“http://yourwebsite.com/redirectAfterFacebookLogout.php”)));

答案 2 :(得分: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]);        
    }