2012-07-14 33 views
9

Estoy usando un inicio de sesión facebook para mi sitio web usando facebook php sdk.¿Cómo cerrar la sesión del usuario con el SDK de Facebook?

Lo que noté es que el enlace logout no hace nada. Después de desconectarme, el usuario puede navegar por el sitio. Aquí está mi código en facebook.php:.

<?php 
    require 'src/facebook.php'; 
    $facebook = new Facebook(array(
      'appId' => '*************', 
      'secret' => '******************************', 
    )); 
    $user = $facebook->getUser(); 
    $loginUrl = $facebook->getLoginUrl(); 
    echo "<a href='$loginUrl'>login</a>"; 

    $logoutUrl = $facebook->getLogoutUrl(); 
    echo $loginUrl; 
    if($user){ 
     session_start() ; 
     $_SESSION['user_info'] = $user; 
     $_SESSION['user_pro']= $facebook->api('/me'); 
     print_r($_SESSION); 
    } 
    else{ 
     echo 'not logged in '; 
    } 

    echo "<a href='example.com/logout.php'>log out </a>" 
?> 

Este code funciona bien en ingresar en el enlace de la sesión debe destruir la sesión. Aquí es el encabezado de la página:

<?php 
    print_r($_SESSION) ; 
    header('example.com') ; 
?> 

El problema con mi página logout.php es que no detecta la sesión en absoluto. No sé si este es un problema facebook api o mi problema php.

¿Cómo se conecte el usuario utilizando el SDK de Facebook?

+1

Los usuarios pueden desconectarse de Facebook ... no pueden desconectarse de su sitio. –

+0

pueden si destruyes la sesión –

Respuesta

18

Puede cerrar la sesión desde su sitio y desde Facebook de la siguiente manera proporcionando la URL de su sitio al siguiente parámetro y destruyendo la sesión

$token = $facebook->getAccessToken(); 
$url = 'https://www.facebook.com/logout.php?next=' . YOUR_SITE_URL . 
    '&access_token='.$token; 
session_destroy(); 
header('Location: '.$url); 

También debe cerrar sesión en su sitio web Y debe evitar que su sitio web recuerde automáticamente a su usuario y vuelva a iniciar sesión inmediatamente.

deshabilitar el código que Auto-logs en su usuario y tratar de cerrar la sesión de nuevo. La destrucción de la sesión no evitará que su sitio cree una nueva sesión válida para el usuario recordado.

+0

intenté' session_destroy() 'y nunca funciona, hago lo que escribí en mi respuesta, espero que a la larga no haga ninguna interrupción –

+0

Esto funciona para mí. Lo que sucedió en mi caso fue la URL que 'getLogoutUrl()' estaba produciendo tenía 'access_token = 0'. Así que seguí el ejemplo anterior agregando manualmente el token de acceso usando '$ facebook-> getAccessToken();'. Pero me pregunto por qué la función 'getLogoutUrl()' no pudo agregarlo, y usó cero en su lugar. ¿Algunas ideas? – Obay

+0

Esto funcionó para mí. Me desconecta de Facebook y destruye la sesión de mi aplicación. ¿Por qué no está documentado esto en algún lugar? ¿Sigue siendo esta la solución "oficial"? –

0

Debe llamar al session_start() en todas las páginas donde se usarán las sesiones.

Para desconectar a alguien de la sesión (es decir, borrarlo) puede usar session_destroy(). Por favor, header('example.com'); no hará nada, ¿tiene la intención de realizar una redirección? Si es así, debe usar `header ('Ubicación: http://example.com/');

EDIT: Perdón por no haber leído esto correctamente, ¿cuál es el segundo fragmento de código? ¿Es esa tu página de logout.php?

Por lo que sé con la API de Facebook, cuando llamas al getLogoutUrl(), es ahí donde debes enviar a tus usuarios cuando hacen clic en el enlace, y no en el tuyo logout.php.

+1

Errr, infractor, ¿quieres comentar? –

+0

downvote todas las respuestas e incluso mi pregunta? sin decir una sola palabra ... –

+0

@MinaGabriel Malditos idiotas, hice + + una pregunta para mantener el equilibrio, ya que todavía no la resolvió. –

0

Cerrar la sesión de los usuarios de Facebook puede ser difícil. Esto funciona para mí

// Get an instance of the Facebook class 
$facebook = $this->facebook_instance_factory(); 
// Destroy the session so that no Facebook data is held 
$facebook->destroySession(); 
$logout = $facebook->getLogoutUrl(); 
$facebook->setAccessToken(''); 
// Redirect the user to the logout url, facebook will redirect him to our page 
wp_redirect($logout); 
+0

gracias por su publicación pero no hace nada –

+0

wp_redirect no funciona fuera de Wordpress. Use 'header (" Ubicación: $ logout "); exit; ' – 1owk3y

0

RESPUESTA

$_SESSION['fb_(your_APP_ID)_access_token'] = '' ; 

cuando el registro en una sesión es inicializado, parece que si nos fijamos cualquiera de estos session variables en NULL que se rompa el registro de la función, y Pida al usuario que vuelva a iniciar sesión

1

Aquí está el código de cierre de sesión de PHP para mi sitio web que registra a un usuario dentro y fuera de Facebook. No es necesario que destruya la sesión para desconectar al usuario; todo lo que tiene que hacer técnicamente es indicarle a su propio sitio web que esta sesión en particular no se puede usar para permitirle al usuario ingresar.

logout.php:

<?php 
    require_once("facebook-php-sdk-6c82b3f/src/facebook.php"); 
    $config = array(); 
    $config['appId'] = '2911111111146'; 
    $config['secret'] = 'a6eaaaaaaaaaaaaaaaaaaaaaaaaaad1a'; 
    $config['fileUpload'] = false; 
    $facebook = new Facebook($config); 
    $logouturl = $facebook->getLogoutUrl(); 
    $_SESSION['user_facebook_email'] = ""; 
    $_SESSION['ask_user_to_login'] = true; 
    header("Location: showquestions.php"); 
?> 

index.php:

<?php 
    require_once("facebook-php-sdk-6c82b3f/src/facebook.php"); 

    $config = array(); 
    $config['appId'] = '2911111111146'; 
    $config['secret'] = 'a6eaaaaaaaaaaaaaaaaaaaaaaaaaad1a'; 
    $config['fileUpload'] = false; 

    $facebook = new Facebook($config); 
    $userId = $facebook->getUser(); 
    if ($_SESSION['ask_user_to_login'] == true || $userId == 0){ 
     $loginUrl = $facebook->getLoginUrl(); 
     $_SESSION['ask_user_to_login'] = false; 
     echo "<button type='button' onClick=\"window.location='$loginUrl'\">" . 
      "<img src='picture.gif' alt='Login with facebook'/>" . 
      "</button>"; 
     exit; 
    } 
    else 
    { 
     $userInfo = $facebook->api('/' + $userId); 
     session_cache_expire (150000); //set the cache expire to 15000 minutes 
     $_SESSION['user_facebook_email'] = $userInfo['email']; 
     $_SESSION['facebook'] = $facebook;  
     header("Location: showquestions.php"); 
    } 
    $userInfo = $facebook->api('/' + $userId); 
    echo "Welcome" . $userInfo['email']; 
?> 

login.php:

<?php 
    session_start();   
    if (isset($_SESSION['user_facebook_email']) !== true || 
     $_SESSION['user_facebook_email'] == "") 
    { 
     header("Location: index.php"); 
     exit; 
    } 
?> 

Luego, en vísperas archivo ry php desea impedir el acceso sin que el usuario que ha iniciado sesión en, poner esto en la parte superior:

<?php 
    require("log2.php"); 
?> 

Con este código, el usuario se registra en forma automática, y si invocan el código de cierre de sesión, el sitio no los deje entrar hasta que inicien sesión de nuevo.

Cuestiones relacionadas