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.

7voto

Henson Punkte 5213

Ich verwende $fb->getUser(), und was ich tat, war fast identisch mit Ihrem.

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

Ich habe festgestellt, dass die Verwendung von nur API, um zu prüfen, ob FB abgemeldet ist oder nicht, manchmal inkonsistent ist, aber mit destroySession() wird die Sitzung sicher zerstört.

3voto

Wenn Sie die Javascript-Aufrufe FB.INIT auf der Anmeldeseite verwenden, dann setzen Sie den Status von true auf false.

Einzelheiten zum Statusattribut : http://developers.facebook.com/docs/reference/javascript/FB.init/

1voto

CesareoAguirre Punkte 1357

Versuchen Sie, die Funktion formatData irgendwo im LoginWindow (AS3) zu finden und suchen Sie diese Zeile:

vars.redirect_uri = FacebookURLDefaults.LOGIN_SUCCESS_URL

Ändern Sie den Wert für http://www.facebook.com/ und melden Sie sich von dieser HTML-Seite ab, wenn Sie angemeldet sind.

Dies ist eine vorübergehend Lösung zum Abmelden, wenn Sie Entwickler und nicht der Endbenutzer sind.

0voto

Oswald Punkte 30371

Facebook sollte die Sitzung von dem Konto trennen, zu dem die Sitzung gehörte. Sie können Facebook::getUser() verwenden, um zu überprüfen, ob dies geschehen ist:

if ($fb->getUser() === null) {
  // User logged out
} else {
  // User logged in
}

0voto

haha Punkte 1512

Versuchen Sie $facebook->setSession(null) oder mit Javascript <a href="http://stackoverflow.com/logout/" onclick="FB.logout();">Logout</a>

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