2010-08-23 5 views
0

J'ai une application Facebook facebook iframe. En haut de chaque page, je lance le script d'authentification de l'exemple php inclus. Pour une raison quelconque cependant, si je me connecte à un compte Facebook, accéder à mon application, se déconnecter de Facebook et dans un nouveau compte lorsque je visite l'application, je suis toujours authentifié en tant que premier utilisateur.facebook session trouble

Comment se fait-il que la session existe toujours? Pourquoi la bibliothèque Facebook ne réalise-t-elle pas qu'elle est invalide?

aidez s'il vous plaît.

Voici mon script d'authentification que j'inclus en haut de chaque page. C'est presque identique à l'exemple. Le seul changement est que j'ai ajouté une ligne pour passer un paramètre GET à travers l'URL de connexion.

$uid = null; //facebook user id 

    require_once "facebook.php"; 

    // Create our Application instance. 
    $facebook = new Facebook(array(
     'appId' => $conf['fb']['appid'], 
     'secret' => $conf['fb']['secret'], 
     'cookie' => true, 
    )); 



    if (is_numeric($_GET['user_id'])) {$user['id'] = $_GET['user_id']; $loginUrlParam = '?user_id='.$_GET['user_id'];} 

    //Facebook Authentication part 
    $session = $facebook->getSession(); 
    $loginUrl = $facebook->getLoginUrl(
      array(
      'canvas' => 1, 
      'fbconnect' => 0, 
      'req_perms' => 'publish_stream', 
      'next' => $conf['dir']['app_url'].$loginUrlParam 
      ) 
    ); 

    $fbme = null; 

    if ($session) { 
     try { 
      $uid  = $facebook->getUser(); 
      $fbme  = $facebook->api('/me'); 

     } catch (FacebookApiException $e) { 
      echo "<script type='text/javascript'>top.location.href = '$loginUrl';</script>"; 
      exit; 
     } 
    } 


    print_r($fbme); 

Mise à jour:

Je viens de trouver quelque chose de très bizarre. Je suis capable d'être connecté à Facebook dans deux navigateurs. Je sais que dans le passé, si je me connectais à l'un d'un navigateur, cela me déconnecterait de l'autre. Y at-il un problème avec facebook atm?

+0

pouvez-vous poster du code ou une URL affichant le code? – Anurag

+0

inclus le code :) – Pablo

+0

juste une note. J'ai la dernière version du SDK. – Pablo

Répondre

1

Votre problème est en fait une combinaison de problèmes

Tout d'abord, vous avez le support des cookies activé sur votre instance de la classe Facebook. Cela déclenche Facebook::getSession() pour rechercher une session dans le cookie si une session n'est pas fournie dans $_REQUEST.

Et, par l'apparence de ce code, puisque vous obtenez la session avant pour savoir qui est l'utilisateur, l'ancienne session qui est encore dans le cookie est ramassée. Rappelez-vous, la déconnexion de Facebook ne fera rien pour supprimer/supprimer les cookies de session sur votre domaine.

Vous avez plusieurs façons de contourner cela. Si vous souhaitez que la prise en charge des cookies soit activée, vous devez vous assurer de réinitialiser correctement ce cookie lorsqu'un utilisateur non identifié visite l'application. C'est quelque chose que vous auriez à faire sur un nouveau chargement de la page de toile - pas quelque chose qui est inclus à chaque page de votre application. Vous pouvez également désactiver le support des cookies, mais vous devez également gérer manuellement l'ID de session et les données de session facebook.

+0

Merci pour la réponse. Comment saurais-je si un «utilisateur non identifié» visite l'application? L'identifiant que $ facebook me donne est celui du 'premier utilisateur' ... – Pablo

+0

Je viens de lire votre réponse, vous avez dit 'Tout d'abord, vous avez activé le support des cookies sur votre instance de la classe Facebook. Cela déclenche Facebook :: getSession() pour rechercher une session dans le cookie si une session n'est pas fournie dans $ _REQUEST. ' Une session est fournie dans $ _REQUEST bien que je puisse voir que c'est dans l'URL de l'iframe. Alors pourquoi la librairie facebook ne l'a-t-elle pas détectée? – Pablo

+0

Dépend. Avez-vous migré vers le paramètre 'signed_request'? –