2012-07-14 20 views
9

Sto utilizzando un login facebook per il mio sito web utilizzando facebook php sdk.Come disconnettersi usando l'SDK di Facebook?

Quello che ho notato è che il collegamento logout non fa nulla. Dopo il logout, l'utente può comunque navigare nel sito. Ecco il mio codice in 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>" 
?> 

Questo code funziona bene sul registro nel link logout dovrebbe distruggere la sessione. Ecco l'intestazione della pagina:

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

Il problema con la mia pagina logout.php è non rileva la sessione a tutti. Non so se si tratta di un problema facebook api o del mio problema php.

Come si accede l'utente utilizzando l'SDK di Facebook?

+1

Gli utenti possono uscire da Facebook ... non possono uscire dal tuo sito. –

+0

possono se si distrugge la sessione –

risposta

18

È possibile disconnettersi dal proprio sito e da Facebook nel modo seguente fornendo l'url del proprio sito al successivo parametro e alla sessione di distruzione

È inoltre necessario disconnetterli dal proprio sito Web E è necessario impedire al sito Web di ricordare automaticamente l'utente e registrarli nuovamente immediatamente.

Disabilitare il codice che si registra automaticamente nel proprio utente e riprovare. Distruggere la sessione non impedirà al tuo sito di creare una nuova sessione valida per l'utente memorizzato.

+0

ho provato' session_destroy() 'e non funziona mai, faccio quello che ho scritto nella mia risposta, speriamo che a lungo termine non faccia nessuna pausa –

+0

Questo funziona per me. Quello che è successo nel mio caso è stato l'URL che 'getLogoutUrl()' stava producendo con 'access_token = 0'. Quindi ho seguito l'esempio sopra aggiungendo manualmente il token di accesso usando '$ facebook-> getAccessToken();'. Ma mi chiedo solo perché la funzione 'getLogoutUrl()' non possa aggiungerla, e invece usa zero. Qualche idea? – Obay

+0

Questo ha funzionato per me. Mi disconnette da Facebook e distrugge la sessione per la mia app. Perché questo non è documentato da nessuna parte? Questa è ancora la soluzione "ufficiale"? –

0

È necessario chiamare session_start() su tutte le pagine in cui verranno utilizzate le sessioni.

Per registrare qualcuno fuori dalla sessione (ad esempio cancellarlo) è possibile utilizzare session_destroy().

Infine, header('example.com'); in realtà non farà nulla, hai intenzione di eseguire un reindirizzamento? Se è così, dovresti usare l'intestazione `(Location: http://example.com/ ');

EDIT: Spiacente di non aver letto correttamente, qual è il secondo frammento di codice? È la tua pagina di logout.php?

Per quanto a conoscenza dell'API di Facebook, quando si chiama getLogoutUrl(), è qui che si devono inviare gli utenti quando fanno clic sul collegamento e non sul proprio logout.php.

+1

Errr, downvoter, cura di commentare? –

+0

downvote tutte le risposte e anche la mia domanda? senza dire una sola parola ... –

+0

@MinaGabriel Maledetti idioti, ho fatto +1 sulla tua domanda di saldo perché non hai ancora risolto. –

0

La disconnessione di utenti da Facebook può essere difficile. Questo funziona per me

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

grazie per il tuo post ma non fa nulla –

+0

wp_redirect non funziona al di fuori di Wordpress. Usa l'intestazione '(" Posizione: $ logout "); exit; ' – 1owk3y

0

RISPOSTA

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

quando il registro in una sessione viene inizializzata, sembra che se abbiamo impostato uno di questi session variabile su null si rompe il registro in funzione e chiedere all'utente di accedere nuovamente

1

Ecco il codice di disconnessione PHP per il mio sito Web che registra un utente dentro e fuori con Facebook. Non devi distruggere la sessione per disconnettere l'utente, tutto ciò che devi fare tecnicamente è segnalare al tuo sito web che questa particolare sessione non può essere utilizzata per consentire all'utente di entrare.

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; 
    } 
?> 

Poi nel vigilia file di ry php si desidera impedire l'accesso senza un utente connesso, mettere questo in cima:

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

Con questo codice, l'utente è collegato automaticamente, e se invocano il codice di logout, il sito non lasciarli entrare finché non si connettono nuovamente.

Problemi correlati