2009-10-09 13 views
0

Je n'arrive pas à obtenir une application facebook connect que je construis pour déconnecter l'utilisateur (désolé, pas d'URL car elle est toujours en développement). Chaque fois que l'utilisateur clique sur un lien avec la classe "déconnexion", le JS suivant fonctionne et semble même afficher le modal FB indiquant que l'utilisateur a été déconnecté. Après avoir atteint le rappel ci-dessusProblème lors de la déconnexion d'un site de connexion Facebook et de la destruction de sessions

$(document).ready(function(){ 
    $('.logout').click(function(){ 
     //Kill facebook Session 
     FB.Connect.logout(function() { 
      window.location = $('.logout').attr("href"); 
     }); 
    }); 
}); 

, la JS envoie à l'utilisateur de la page où PHP force déconnexion à nouveau la suppression d'une session personnalisée et assure que la session FB a été supprimée. Ensuite, l'utilisateur est renvoyé à la page sur laquelle il était lorsqu'il a cliqué sur le lien "Déconnexion".

//Remove our site session 
Auth::logout(); 



/* FAIL 
//Send user to FB logout page and then back here 
$logout_url = $this->fb->get_logout_url(site_url($return_to ? base64_url_decode($return_to) : '')); 

// Clear any stored state 
$this->fb->clear_cookie_state(); 

exit(header("Location: ". $logout_url)); 
*/ 



//FAIL 
//$this->fb->logout(site_url($return_to ? base64_url_decode($return_to) : '')); 


//FAIL 
//Remove user (is this needed..?) 
//$this->fb->set_user(NULL, NULL); 


//Remove the FB session cookies (in case the JS didn't) 
$this->fb->clear_cookie_state(); 


// Redirect to privious page 
redirect(($return_to ? base64_url_decode($return_to) : '')); 

Cependant, ce processus aboutit ensemble à l'utilisateur étant de retour là où ils étaient et encore connecté. Un second clic sur le lien semble faire l'affaire et de supprimer la session cependant. J'ai surveillé firebug (w/firecookie) et la page de déconnexion de PHP rapporte la suppression des cookies de session FB - pourtant la prochaine page chargée semble toujours les utiliser ?!

Si quelqu'un sait comment complètement DESTROY TOUS LES FACEBOOKS ahem ... sessions alors s'il vous plaît parler.

: EDIT: J'ai même essayé de supprimer manuellement tous les cookies sur la page de fermeture de session et il échoue encore

if($_COOKIE) { 

    foreach($_COOKIE as $name => $value) { 

     //Get the current cookie config 
     $params = session_get_cookie_params(); 

     // Delete the cookie from globals 
     unset($_COOKIE[$name]); 

     //Delete the cookie on the user_agent 
     setcookie($name, '', time()-43200, $params['path'], '', $params['secure']); 
    } 
} 

Répondre

1

Je pense que parce que vous commencez les cours api Facebook il lit la session et définit tous les cookies à nouveau votre appel Javascript juste effacé.

Le php facebook lib et le FB js lib utilisent tous deux les mêmes noms de cookie. (donc vous pouvez vous connecter via javascript et le php lib sera également connecté).

Il y a une fonction spécifique pour un journal sortir et aller à une URL de la manière suivante:

FB.Connect.LogoutAndRedirect(url); 
+0

Comment PHP peut-il lire la session (à partir des cookies) si le Javascript vient d'effacer tous les cookies? En outre, le LogoutAndRedirect a le même problème que l'utilisation de la déconnexion, puis window.location (qui est ce que j'utilise). – Xeoncross

+0

javascript détruit le cookie PHP_SESSION? Les données sont stockées quelque part, ce qui signifie soit un cookie soit un paramètre post/get request. – Les

+0

Je sais que les pages de canevas ont des paramètres GET pour chaque page - mais pas pour connecter des sites. Et puisque window.location est utilisé, aucune donnée POST n'est envoyée non plus.Quoi qu'il en soit, votre recommandation m'amène à penser maintenant à d'autres choses que je peux tester. J'accepterai donc votre réponse et je rapporterai mes conclusions. – Xeoncross

0

Il suffit d'utiliser la balise <fb:login-button> et assurez-vous que vous avez autologoutlink='true' Ensuite, lorsque l'utilisateur est connecté, imprimez la balise <fb:login-button> et il apparaîtra comme une "Déconnexion?" bouton

Espérons que ça aide.

EDIT: Les docos pour connexion bouton: http://wiki.developers.facebook.com/index.php/Fb:login-button

+0

I J'ai peur que le bouton de déconnexion ne soit utile que pour les sites sans besoin de rappel. En d'autres termes, après que l'utilisateur clique sur ce bouton et se déconnecte - ils ont toujours notre session de site et il n'y a aucun moyen d'actualiser la page. – Xeoncross

0

Cela a fonctionné pour moi (où la page de redirection efface les choses du serveur)

  FB.logout(function(response) { 
       window.location.href="/login/signout"; 
      }); 
Questions connexes