代码之家  ›  专栏  ›  技术社区  ›  Abhinav

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

  •  16
  • Abhinav  · 技术社区  · 15 年前

    我正在尝试使用PHP和Zend框架构建一个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 回复  |  直到 12 年前
        1
  •  20
  •   typeoneerror    15 年前

    您必须调用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]);       
    }
    
        2
  •  0
  •   Dharti Patel    13 年前

    您可以使用如下PHP代码注销facebook用户并将用户重定向到您的网站页面:

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

        3
  •  0
  •   Stephen Gerard Darragh    12 年前

    (新FACEBOOK SDK) 对我来说getconfig()不起作用,所以我必须从base_facebook.php文件中找到新函数,并在其中添加这段代码。

     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]);        
        }