2010-01-01 6 views
3

저는 PHP를 사용하여 구축 된 웹 사이트의 로그인 시스템에 Facebook Connect API를 사용하고 있습니다. 사용자가 로그인되어 있는지 확인 할 간단한 방법은 없습니다. 사용자가 사이트로 인증되면Facebook 연결 기반 사이트의 쿠키를 업데이트 하시겠습니까?

$fb = new Facebook($api, $secret); 
$fb->get_loggedin_user(); 

위의 기능은 항상 사용자 ID를 반환, 그들은, 페이스 북에서 그것을 아직 반환에 서명하는 경우에도 그들의 사용자 ID.
나는 잠시 동안이 일을 해왔다. 주변을 살펴본 결과, 사용자가 사이트에서 인증 될 때 Facebook JavaScript API가 세션에 대한 정보를 저장하는 데 사용되는 쿠키를 저장하기 때문에 이것이 원인이라고 생각한다. .
그러나 사용자가 일반 Facebook 세션에서 로그 아웃하면 세션이 더 이상 유효하지 않더라도 쿠키는 여전히 값을 반환합니다.
제 질문은 세션이 더 이상 유효하지 않을 때 값을 제공하지 않도록 쿠키를 어떻게 업데이트합니까?

답변

3

약간 힘들 수 있습니다. 기본적으로 페이스 북은 사용자의 브라우저에 응용 프로그램 아이디 (예 : 12345_fb_sig = 등)의 네임 스페이스가있는 쿠키를 저장합니다. 이 쿠키는 FB Connect 앱에 사용자가 Facebook에 로그인했음을 알리고 페이스 북 세션 ID를 전달하는 데 사용됩니다. 그러나 사용자가 다른 곳으로 가서 로그 아웃하면 이러한 쿠키가 지워지지 않고 Connect 사이트와 관련하여 사용자는 계속 로그인됩니다. 사용자가 나중에 다시 돌아 오면 해당 API 호출을 시도합니다 세션 키를 입력하면 실패합니다.

쿠키를 PHP FB API 클라이언트 인 $facebook->api_client->clear_cookie_state()에 대한 서버 측 라이브러리 호출에서 지울 수 있지만이 방법은 권장하지 않습니다. 세션 키가 여전히 유효하고 많은 오버 헤드가 추가되는지 확인하기 위해 각 페이지로드시 API 호출을해야합니다.

일반적으로 FB Connect를 위해 이미 활용하고있는 FB Javascript 라이브러리를 사용하는 것이 가장 좋은 방법입니다. 클라이언트의 세션 상태가 변경된 경우는 페이지 새로 고침을 강제 FB 연결을 설정하는 데 사용되는 FB.init() 호출에 매개 변수를 추가 할 수 있습니다 : 사용자가 페이지를 다시로드 일어나고 볼로

FB.init("<YOUR-API-KEY>", "<YOUR-CROSS-DOMAIN-CHANNEL-URL>", {"reloadIfSessionStateChanged":true}); 

그것은 조금 세련이다 그러나 확신 할 수있는 최선의 방법 일 것입니다. 이 기술에 대한 자세한 내용은 Detecting Connect Status 위키 페이지를 확인해주십시오.

+0

페이지를 새로 고침한다고 말하면 페이스 북에서 로그 아웃 한 경우에만 발생합니까? – JasonDavis