7 Stimmen

Facebook API - Sitzung bleibt nach Abmeldung des Benutzers bestehen

Ich benutze Facebook php-sdk in meinem iframe facebook app, um Benutzer Login-Status zu erhalten. Gleich nachdem ich mich über Facebook-Konto > Abmelden Link abmelden, ist die Sitzung noch nicht zerstört. Ich muss ein paar Minuten warten, bevor alte Sitzung abläuft, dann wird meine App wieder den richtigen Login-Status erhalten.

Ich erwarte, dass Facebook sich selbst und die Sitzung beendet, wenn sich der Benutzer abmeldet. Wie kann ich die Sitzung manuell beenden?

Hier ist mein Code:

$initParams = array(
  'appId'  => $conf['app_id'], 
  'secret' => $conf['secret_api_key'],
  'cookie' => TRUE,
);

$fb = new Facebook($initParams);
$fb->getSession();  // will return a session object eventhough user signed out!

GELÖST:

aufrufen $fb->api('/me') zerstört die Sitzung, wenn sich der Benutzer zuvor abgemeldet hat. Ich habe meinen Code wie folgt geändert:

if ($session)
{
    try
    {
        $fbuid = $fb->getUser();
        $me = $fb->api('/me');
    }
    catch(FacebookApiException $e){}
}

Wenn der API-Aufruf erfolglos ist, $session wird auf NULL gesetzt. Sehr seltsames Verhalten, ich erkläre nicht alles, was hier vor sich geht, aber es löste mein Problem, dass das Rest-Session-Objekt nicht über getSession() méthode.

0voto

CesareoAguirre Punkte 1357

Das Abmelden funktioniert nicht, egal was Sie tun.

Versuchen Sie, diesen Link in Ihrem Browser zu posten, nachdem Sie sich bei Facebook angemeldet haben.

https://www.facebook.com/logout.php

Was passiert? Sie werden zu Ihrem Facebook weitergeleitet. Kein Logout.

Was auch immer Sie tun, prüfen Sie die Funktion (hängt von Ihrer API ab) handleLogout und prüfen Sie die Ausgabe. In meinem Fall wird die gesamte Facebook-HTML-Seite zurückgegeben.

0voto

Kup Punkte 882

Die einzige Möglichkeit, dieses Problem zu lösen, bestand darin, die Sitzung mithilfe der signierten Anforderung zu löschen, um die Benutzerkennung zu überprüfen:

$facebook = Membership::getFacebookApp();
$signed_request = $facebook->getSignedRequest();
if(isset($_SESSION['facebook_id']) && $signed_request['user_id'] != (int)$_SESSION['facebook_id']){
    $_SESSION = array();
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X