2011-12-06 2 views
2

현재 로그인을 처리하기 위해 자체 시스템뿐만 아니라 FB Connect를 사용하는 사이트를 구현 중입니다. 현재 설정되어있는 방식으로 이전에 사이트를 방문한 적이 있고 사용 권한을 승인 한 사용자는 사이트를 다시 방문 할 때 자동 로그인됩니다. 또한 사용자가 FB를 사용하여 자신의 계정에 로그인 할 때 로그 아웃 버튼을 누르면 FB에서 로그 아웃됩니다.Facebook PHP SDK 캐싱 사용자

지금 사용자가 로그인하고 로그 아웃 한 버튼을 누르면 FB에서 로그 아웃됩니다. 사이트는 자동으로 새 세션을 생성하고 사용자가 PHP SDK getUser() 함수를 사용하여 여전히 FB에 로그인했는지 확인하기 위해 수표가 호출됩니다. 사용자가 SDK에서 로그 아웃 한 경우에도 사용자 ID가 캐싱되고 어쨌든 로그인 한 것으로 나타납니다. 아래 캐시 호출을 볼 수 있습니다. 어쨌든 FB SDK를 수정하면이 w/o를 무시할 수 있습니까? 아니면 문제가 잘못되어 있습니까?

if ($this->user !== null) { 
    // we've already determined this and cached the value. 
    return $this->user; 
} 

return $this->user = $this->getUserFromAvailableData(); 
+0

이 문제도 발생했습니다. 나는 해결책을 구경 할 것이다. –

답변

5

응용 프로그램 흐름과 관련이있을 수 있습니다. FB PHP SDK는 나에게도 힘든 시간을주었습니다.

이 그래도 도움이 될 수 있습니다 :

가 logoutUrl로 리디렉션하여 사용자가 로그 아웃, 이것은 다음 사이트로 다시 리디렉션합니다. 이 시점에서 으로 전화해야합니다. $ facebook-> destroySession(); 이 후

/** 
* Destroy the current session 
*/ 
public function destroySession() { 
    $this->setAccessToken(null); 
    $this->user = 0; 
    $this->clearAllPersistentData(); 
} 

정상적으로 세션을 취소하고 사용자가 완전히 캐시 로그 아웃하지해야합니다

는 (라인 base_facebook.php의 1092 년 공연으로) 그 코드가 무엇을 살펴보십시오. 나는 loginUrl 및 logoutUrl 생성 할 때 내 코드에서

, 나는 다음을 수행하십시오

$fb_data = array(
    'loginUrl' => $facebook->getLoginUrl(array('scope' => 'email,user_birthday')), 
    'logoutUrl' => $facebook->getLogoutUrl(array('next' => base_url('index.php/authenticate/kill_session'))), 
); 

그것은 인증합니다/kill_session에 내가 $ facebook-> destroySession()를 호출 방법이다;

+0

그리고 사용자가 다른 사이트 (또는 페이스 북)를 통해 FB에서 로그 아웃 한 경우 어떻게 될까요? 이 솔루션은 좋지 않습니다. –

+0

@JimmyKane 위 코드를 이해하지 못했습니다. 더 나은 해결책이 있다면 기부 해주십시오. – SeanNieuwoudt

5

문제 : 세션 킬러에게 전화 한 사용자가 제공 한 링크가 아닌 페이스 북을 통해 사용자가 로그 아웃 한 경우 어떻게됩니까?

사용자가 사라져도 여전히 세션을 캐시 할 수 있습니다.

0

JS와 PHP를 조합하여 FACEBOOK 사이트에서 로그 아웃 한 사용자 문제를 해결할 수 있습니다.

페이지로드시 JS getloginstatus()를로드하고 다른 페이지 (예 : Facebook JS loginstatus! = 사용자 로그인 상태)와 일치하지 않을 때마다 JS를 통해 새로 고침 불일치.

자동으로 페이지가 새로 고쳐 지지만 버그가 발생할 수 있습니다.