2009-10-02 9 views
1

Je ne suis pas sûr que la bibliothèque Facebook côté serveur php valide les sessions en charge. Alors je veux savoir s'il y a une meilleure pratique pour m'assurer que j'ai vraiment une session FB valide et non pas des crackers qui ont altéré les données $ _COOKIE.Tester si une session Facebook est valide?

$fb = new Facebook(); 

if($fb->session_expires !== 0 && $fb->session_expires < time()) { 
die('bad and/or old session'); 
} 

ou est-il préférable de tester les utilisateurs ID FB?

$fb = new Facebook(); 

if($fb->user) { 
die('no Facebook User Id given'); 
} 

EDIT: Ok , according to facebook "Votre bibliothèque client doit effectuer toutes la validation nécessaire pour vous" en utilisant le secret de l'application à tous les md5 params et valider le hachage. Donc, si vous avez une session - c'est un FB valide généré (bien qu'il puisse encore être expiré).

Supposons que vous vous connectiez à une application de connexion. Ensuite, vous vous déconnectez de FB. Si vous chargez une autre page sur cette application de connexion, FB JS n'a aucune chance de modifier les cookies pour indiquer que vous êtes réellement déconnecté. Et puisque la bibliothèque PHP n'appelle pas réellement FB pour valider votre session, elle ne peut pas non plus savoir supprimer les mauvaises valeurs. Le résultat est que vous avez un ensemble valide de cookies envoyés par FB qui ne sont plus bons. Donc, si vous essayez d'appeler une méthode API qui nécessite une session, votre application génère une erreur fatale.

Répondre

0

Appel d'une méthode API $facebook->getUser() et qui devrait vérifier si l'utilisateur est valide.

https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php#L508

Comme dans l'exemple fourni dans le kit de développement

// Get User ID 
$user = $facebook->getUser(); 

// We may or may not have this data based on whether the user is logged in. 
// 
// If we have a $user id here, it means we know the user is logged into 
// Facebook, but we don't know if the access token is valid. An access 
// token is invalid if the user logged out of Facebook. 

if ($user) { 
    try { 
    // Proceed knowing you have a logged in user who's authenticated. 
    $user_profile = $facebook->api('/me'); 
    } catch (FacebookApiException $e) { 
    error_log($e); 
    $user = null; 
    } 
} 
+0

Qui sait s'il y avait une réponse il y a 4 ans. Accepter cela sans tester depuis (apparemment) c'est maintenant la façon de faire les choses. – Xeoncross

0

Une réponse tardive mais, actuellement Facebook classe PHP ont une méthode getSession():

if ($facebook->getSession()) { 
    // Do stuff 
} 
Questions connexes