【问题标题】:How to log out users using Facebook Connect in PHP and Zend?如何在 PHP 和 Zend 中使用 Facebook Connect 注销用户?
【发布时间】:2010-11-26 01:44:09
【问题描述】:

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

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

我尝试了facebook_client->expire_session()facebook_client->clear_cookie_state();,在调用Zend_Auth::getInstance()->clearIdentity() 之后还尝试了facebook_client->logout($next)

它们似乎都不起作用。

【问题讨论】:

    标签: php facebook zend-framework frameworks


    【解决方案1】:

    您必须先调用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]);       
    }
    

    【讨论】:

    • 是的,工作!在没有附加函数 _killFacebookCookies() 的情况下对其进行了测试,工作正常。
    【解决方案2】:

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

    header("位置:" .$facebook->getLogoutUrl(array('next'=>"http://yourwebsite.com/redirectAfterFacebookLogout.php")));

    【讨论】:

      【解决方案3】:

      (新的脸书 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]);        
          } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 2012-03-06
        • 1970-01-01
        • 1970-01-01
        • 2014-07-17
        • 1970-01-01
        相关资源
        最近更新 更多