2012-05-02 4 views
3

저는 facebook php sdk를 구현하고 사용자 login/connect에 사용하고 있습니다. 예상대로 은 모든 그러나, 각 페이지의 상단에, 나는이 호출은Facebook 연결이 매우 느립니다. AJAX를 사용할 수 있습니까?

.. 사용자가의 여부가 기록되어 있는지 확인 ('ME /') $ facebook-> API를 호출 할 필요가 작품 매우 느리게, 때로는 돌아 오기까지 2 초가 걸립니다.

따라서, 사용자가 상호 작용은 항상이 $ facebook-> API는 ('ME /') 호출은, 그것 때문에, 나는 의심되는 페이지를로드하기 전에 1 ~ 2 초 지연 ..

있다 HTTPS ..

어떤 제안 ....

  $facebook = new Facebook(array('appId' => 'xxxxxxxxxxxxxxx', 'secret' => 'xxxxxxxxxxxxxxxxx',)); 
      $user = $facebook->getUser(); 
      if ($user) 
      { 
      try        { $user_profile = $facebook->api('/me','GET'); } 
      catch (FacebookApiException $e) { error_log($e); $user = null; } 
      } 
      $login_parms = array('scope' => 'user_birthday', 'redirect_uri' => 'http://xxx.com/login'); 
      $login_link = $facebook->getLoginUrl($login_parms); 


      if($user) 
      { 
      /* logged in */ 
      } 
      else 
      { 
      /* not */ 
      } 
+0

내 질문 다시 : 아약스는 .. 나는 백그라운드에서 $ facebook-> api ('me')를 호출 할 수 있습니까 ?? –

+0

귀하의 질문에 대한 대답은 : 예, 할 수 :) – Oerd

+0

그 대답에 따라 페이지의 유일한 섹션을 누른 다음 예를 들어, 아약스를 사용하는 경우 그 페이지에 예 : 콘텐츠 또는 메뉴 그 대답에 따라 달라집니다 어쨌든 나머지 페이지 콘텐츠를 렌더링하기 전에 대답을 기다려야 할 것입니다. – Anigel

답변

0

당신이 $ facebook-에서 "신선한"값을 얻을 필요가없는 경우> API를 사용하여 ("/ 나를"). 그렇다면 PHP 프레임 워크 (예 : Zend, Yii, Codeigniter)를 사용하는 경우 응답을 캐시 해 두는 것이 좋습니다. 이는 매우 간단합니다.

PHP 프레임 워크를 사용하지 않는다면 캐시 솔루션에 대한 훌륭한 ZF 문서를 살펴 보는 것이 좋습니다. 당신은, 그러나, 신선한 값 각 부하가 필요한 경우

Zend Framework - Cache

당신은 단지 $ facebook-> API를 반환하는 간단한 페이지 ("/ 나를") 부분을 만들 수 있으며 같은 베어 HTML 반환합니다. 그런 다음 응답이 완료되면 응답을 수신하는 a 또는 유사하게 유지하십시오. 쉬운 해결책은 jQuery를 사용하여 그냥 쓸 것 :

$("#div-id").load("/page-that-returns-facebook-api-me-result"); 
1

는 로그인 양식이 일부 물레를 추가, 당신의 PHP 스크립트 준비 문서에 아약스를 호출 스크립트는 허위 또는 사용자 데이터에 loged (이상 반환 데이터가 필요하다면 - 리다이렉트 URL) 그리고 결과에 따라 폼을 로그인하거나 현재 로그인 한 사용자에게 표시하십시오.

난 자바 스크립트, 사용자에 loged 기억 경우 Facebook에 첫 번째 통화를 UI 등

또 다른 방법은 캐시입니다 (만료와 세션)을 변경 리디렉션, 모든 논리가 서버에서 반환 된 내용에 따라 처리 할 것입니다 무엇을 의미 그것. 그리고 Session 변수가 존재하고 아직 만료되지 않았는지 확인하십시오. 민감한 작업을 수행하거나 만료 될 때 다시 전화하십시오.

+0

인증 목적으로 javascript를 사용하지 말 것을 권하지 않습니다 (예 : 인증되지 않은 사용자를 리디렉션). - 아마도 당신의 문장을 오해했을 것입니다. "Javascript가 서버, 리디렉션, UI 등에서 반환되는 내용에 따라 모든 로직을 처리한다는 것을 의미합니까?" – gernberg

+0

모든 인증 논리는 여전히 서버에 있어야하며 네, 자바 스크립트를 사용하지 않는 것을 선호하지만 모든 것이 서버에서 처리 될 때 보안 문제가 표시되지 않습니다."논리 "는 UI를 의미합니다. –

2

각 페이지로드시 Facebook API 요청을 실제로해서는 안됩니다. 사용자가 로그인 할 때 한 번만하십시오. 그런 다음 세션 (또는 서명 된 쿠키)에 "로그인 한"플래그를 저장할 수 있습니다.

예 : 사용자의 페이스 북 프로필 정보 중 일부는 세션이나 데이터베이스에도 넣습니다.