2010-12-22 4 views
7

내 iframe Facebook 응용 프로그램에서 Facebook 로그인 정보를 얻기 위해 Facebook php-sdk를 사용하고 있습니다. facebook 계정> 로그 아웃 링크를 사용하여 로그 아웃 한 직후 세션이 아직 삭제되지 않았습니다. 이전 세션이 만료되기 전에 몇 분 기다려야합니다. 그런 다음 내 앱이 올바른 로그인 상태를 다시 얻습니다.Facebook API - 사용자 로그 아웃 후 세션이 남아 있습니다.

페이스 북은 사용자가 로그 아웃 할 때 자신과 세션을 죽일 것으로 예상됩니다. 수동으로 세션을 어떻게 종료합니까? 이 해결

$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! 

: 사용자가 이전에 로그 아웃 경우

$fb->api('/me')를 호출하는 세션을 파괴

여기 내 코드입니다. 나는 다음과 같은 내 코드를 변경했습니다 : API 호출에 실패

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

경우, $session이 NULL로 설정됩니다. 매우 이상한 행동, 여기서 진행되는 모든 것을 설명하지는 않지만 잔여 세션 객체가 getSession() 메소드를 통해 업데이트되지 않는 문제를 해결했습니다.

+0

경우]를 로그 아웃 URL 링크가 올바르게 작성되었습니다. 코드에 문제가 없어야합니다 .. 프런트 엔드 페이지를 표시 할 수 있습니까? – ifaour

+1

댓글에 명확하게 명시된 것처럼 이상한 행동이라고 생각하지 않습니다. [여기] (https://github.com/facebook/php-sdk/blob/master/examples/example.php) _ 우리는 그 사실을 알지 못합니다. 우리가 session._ – ifaour

+0

을 사용하여 API 호출을하기 전까지는 여전히 유효합니다. 예제 코드의 주석을 제대로 읽지 못했습니다. 입력 해 주셔서 감사합니다. – flochtililoch

답변

0

페이스 북은 세션이 속한 계정에서 세션의 연결을 해제해야합니다. 당신은이 작업이 완료되었는지 여부를 확인하기 위해 페이스 북 :: 인 getUser()를 사용할 수 있습니다

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

getUser() 메소드 코드는 getSession()을 기반으로합니다. 표준 페이스 북 로그 아웃 후에도 세션이 계속 존재합니다. public function getUser() { $ session = $ this-> getSession(); $ 세션을 반환 하시겠습니까? $ 세션 [ 'uid'] : null; } – flochtililoch

0

은 당신이 어떤 식으로 작동하지 않는 자바 스크립트를 <a href="/logout/" onclick="FB.logout();">Logout</a>

+1

로그 아웃 비트를 직접 처리하는 경우 작동하지만 페이스 북 로그 아웃 메뉴에서 로그 아웃 할 때 알릴 방법이 없습니다 – flochtililoch

0

로그 아웃을 사용하여 $facebook->setSession(null) 또는보십시오.

페이스 북에 로그인하면 브라우저에이 링크를 배치 해보기.

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

어떻게 될까요? 그것은 당신을 당신의 facebook에 데려 간다. 전혀 로그 아웃하지 않았습니다.

캡쳐 한 기능 (API에 따라 다름) handleLogout을 확인하고 출력을 확인하십시오. 제 경우에는 전체 facebook html 페이지를 반환합니다.

1

LoginWindow (AS3)에서 어딘가에 formatData 기능을 찾는 시도하고이 줄을 찾습니다. 로그인 할 때 http://www.facebook.com/에 대한 가치와 그 html 페이지에서 로그 아웃

vars.redirect_uri = FacebookURLDefaults.LOGIN_SUCCESS_URL 

변경을

이것은 입니다 임시 사용자 최종 사용자가 아닌 개발자 인 경우 로그 아웃하는 솔루션입니다.

7

저는 $ fb-> getUser()를 사용하고 있습니다. 내가 한 것은 당신과 거의 동일했습니다.

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

나는 FB하지 가끔 로그 아웃 또는 여부를 확인하는 유일한 API를 사용하여 일치하지 않는 것을 발견하지만, destroySession()로 세션이 반드시 파괴 될 것입니다.

+2

시도했지만 실패했습니다 .. 사용자가 로그 아웃 한 경우 /그녀의 페이스 북 (응용 프로그램이 아님) $ fb-> getUser()가 여전히 uid를 제공합니다. 새 사용자가 페이스 북에 로그인하더라도 $ fb-> getUser()는 여전히 이전 UID를 반환합니다. –

0

나는이 문제를 해결하기 위해 관리했습니다 유일한 방법은 사용자 ID 확인 서명 요청을 사용하여 세션을 취소하여이었다

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