2009-09-06 21 views
16

Estoy intentando crear una aplicación Connect utilizando PHP y Zend Framework. También tengo un sistema de autenticación de usuario basado en Zend_Auth. Ahora, puedo iniciar sesión con Facebook pero el cierre de sesión no funciona.¿Cómo cerrar sesión los usuarios que usan Facebook Connect en PHP y Zend?

Necesito borrar la identidad de Zend_Auth y eliminar toda la información de inicio de sesión de Facebook. ¿Cuál sería la mejor manera de hacer esto?

me trataron facebook_client->expire_session() y facebook_client->clear_cookie_state(); juntos y también facebook_client->logout($next) después de llamar Zend_Auth::getInstance()->clearIdentity()

Ninguno de ellos parece funcionar.

Respuesta

20

Tienes que llamar al cliente javascript cerrar sesión primero, luego enviarlos a tu secuencia de comandos php logout. Por lo tanto, llamar Js:

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

Verás una ventana emergente modal que dice "está registrando este sitio y facebook * Vas a ser redirigido a donde la secuencia de comandos de cierre de sesión es:

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

también suelo llamar a esta función en el script de cierre de sesión PHP, sólo para estar seguro:

/** 
* 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

¡Gracias! ¡Funciona! :) – Abhinav

+0

¡yeap, funciona! Probado sin la función adicional _killFacebookCookies(), funciona bien. – Alex

0

Puede cerrar la sesión del usuario de facebook y redirigir al usuario a la página web con código PHP como esto:

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

0

(NUEVO SDK de FACEBOOK) Para mí, el getconfig() no funcionaría. Así que tuve que encontrar las nuevas funciones del archivo base_facebook.php y agregar este bit de código en él. Luego llámelo en su archivo de llamadas. Antes de hacerlo, llame a $ 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]);   
    } 
Cuestiones relacionadas