2010-01-01 5 views
3

J'utilise l'API Facebook Connect pour le système de connexion sur un site web construit en PHP. Il n'y a aucun moyen simple de déterminer si un utilisateur est connecté.Mettre à jour les cookies pour le site basé sur Facebook Connect?

$fb = new Facebook($api, $secret); 
$fb->get_loggedin_user(); 

La fonction ci-dessus renvoie toujours un identifiant d'utilisateur, une fois qu'un utilisateur est authentifié avec le site, même s'ils signent sur Facebook, il encore des retours leur identifiant utilisateur. J'ai travaillé dessus pendant un certain temps, et après avoir regardé autour, je pense que la raison pour laquelle c'est parce qu'un utilisateur est authentifié sur le site, l'API Javascript de Facebook stocke les cookies qui sont utilisés pour enregistrer des informations sur la session .
Toutefois, si l'utilisateur se déconnecte de la session Facebook habituelle, le cookie renvoie toujours des valeurs, même si la session n'est plus valide.
Ma question est comment puis-je mettre à jour les cookies afin qu'ils ne me donnent pas de valeurs lorsque la session n'est plus valide?

Répondre

3

Cela peut être un peu difficile. Fondamentalement, Facebook stocke un tas de cookies sur le navigateur de l'utilisateur qui sont nommés à votre identifiant d'application (par exemple, 12345_fb_sig = etc). Ces cookies sont utilisés pour indiquer à votre application FB Connect que l'utilisateur s'est connecté à Facebook et transmettre l'identifiant de la session facebook. Mais si l'utilisateur va ailleurs et se déconnecte, ces cookies ne sont pas effacés, et en ce qui concerne votre site Connect, l'utilisateur est toujours connecté. Si l'utilisateur revient plus tard et que vous essayez un appel d'API avec ce clé de session, elle échouera.

Vous pouvez effacer ces cookies d'un appel de bibliothèque côté serveur au client API PHP FB, $facebook->api_client->clear_cookie_state(), cependant, je ne recommanderais pas cette méthode. Cela vous oblige à effectuer une sorte d'appel API sur chaque chargement de page afin de confirmer que la clé de session est toujours valide, ce qui ajoute beaucoup de temps système.

Généralement, la meilleure façon de gérer cela est avec les bibliothèques FB Javascript que vous utilisez déjà pour FB Connect. Vous pouvez ajouter un paramètre à l'FB.init() appel utilisé pour configurer FB Connect qui forcera une actualisation de la page si l'état de la session du client a changé:

FB.init("<YOUR-API-KEY>", "<YOUR-CROSS-DOMAIN-CHANNEL-URL>", {"reloadIfSessionStateChanged":true}); 

Il est un peu inélégante, car l'utilisateur verra un rechargement de la page qui se passe , mais c'est probablement le meilleur moyen d'être sûr. Je vous recommande fortement de consulter la page wiki Detecting Connect Status pour plus d'informations sur ces techniques.

+0

Lorsque vous dites que la page va être rechargée, est-ce seulement le cas si elle se déconnecte de Facebook? – JasonDavis

Questions connexes