2012-09-07 4 views
2

Je développe une application basée sur PHP avec CodeIgniter en utilisant Facebook Connect SDK pour php. Jusqu'à présent, tous les utilisateurs peuvent se connecter au système mais pour certains lorsqu'ils essaient de se déconnecter, la session n'expire pas! C'est vraiment bizarre puisque cela fonctionnerait pour certains utilisateurs et ne fonctionnerait pas pour les autres! Voici le code de fermeture de session de base que j'utiliser que Facebook fourni: contrôleur:Facebook Connect Se déconnecter

if ($user) { 
      $data['logoutUrl'] = $this->facebook->getLogoutUrl(); 

Vue:

<a href="<?php echo $logoutUrl; ?>" id="bstyle" onclick="RemoveSess()">Logout</a> 

JavaScript:

function RemoveSess(){ 
       $.post("<?php echo base_url(); ?>"+ "/facebook_cn/remSess", function(data){ 
         document.getElementById('message').innerHTML = $data;  
         }); 
      } 

Php Controller:

function remSess() 
{ 
    $data2 = array('user_id' => '','logged_in' => ''); 
    $this->session->unset_userdata($data2); 
    $this->session->sess_destroy(); 
    session_destroy(); 
    $data = array('sess' => "gone"); 
    echo json_encode($data["sess"]="gone"); 
} 

Répondre

1

Vous détruisez une session locale mais l'utilisateur ne se déconnecte pas de Facebook avec ce code. Ainsi, votre application mettra en cache la session Facebook de l'utilisateur dès que vous initierez SDK. Vous devez vous déconnecter de l'utilisateur à la fois sur Facebook et sur votre site ou vérifier la fonction de connexion/connexion Facebook pour ne pas vous connecter automatiquement.

Fournissez la fonction de connexion et le code dans lequel vous pouvez utiliser Facebook SDK si vous avez besoin de plus d'explications.

Mise à jour

C'est ce que j'ai pour FB connecter:

$this->_facebook = new Facebookapi($settings); 

// Try to get the user's id on Facebook 
$userId = $this->_facebook->getUser(); 

// If user is not yet authenticated, the id will be zero 
if($userId == 0){ 
    $this->_loginUrl = $this->_facebook->getLoginUrl(array('scope'=>'email')); 
}else{ 
    $_user = $this->_facebook->api('/me'); 
    $this->_user = new Users(); 
    $this->_user->load($_user['username'], 'facebook'); 
} 

Donc, si l'utilisateur est connecté facebook je vérifier si je l'ai déjà utilisateur avec un tel nom d'utilisateur et si oui je charge l'utilisateur objecter. L'utilisateur sera automatiquement connecté à mon site sans avoir besoin de cliquer à nouveau sur le bouton de connexion.

Vous devez vérifier votre code pour vous assurer que vous n'avez pas quelque chose comme ça ou que votre utilisateur ne se déconnecte jamais avant de se déconnecter d'abord de Facebook.

+0

UAWDT, pourriez-vous ajouter un peu plus de détails ici pour rendre cela plus clair? Je pense que je peux deviner la plupart de ce que vous voulez dire, mais je ne suis pas sûr. J'ai aussi fait quelques modifications mineures mais il y a des endroits où ce n'est pas clair ce qui est dit. – Paul

+0

Pouvez-vous s'il vous plaît ajouter votre fonction de connexion et __constructeur de contrôleur qui gère la connexion/connexion facebook? – BeRocket

Questions connexes