2012-05-02 2 views
3

Я реализую facebook php sdk и использую его для входа/подключения пользователя. все работает, как и ожидалось, однако, в верхней части каждой страницы, мне нужно позвонить $ facebook-> апи («/ я»), чтобы определить, если пользователь вошел в систему или нет ..Facebook подключается очень медленно, могу ли я использовать AJAX?

Этот вызов очень медленно, иногда, до 2 секунд, чтобы вернуться.

Таким образом, любое взаимодействие пользователя, всегда имеет задержку 1-2 сек перед любыми страницами ..

я подозреваю, это потому, что за $ facebook-> апи («/ я») вызов используя 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

Мой вопрос re: ajax был .. могу я назвать $ facebook-> api ('me') в фоновом режиме? –

+0

Ответ на ваш вопрос: да, вы можете: – Oerd

+0

Если это единственный раздел страницы, который зависит от ответа, то да просто используйте ajax, если что-то еще на этой странице, например, содержимое или меню зависят от этого ответа, тогда вам придется дождаться ответа до того, как он каким-либо образом оставит содержимое оставшейся страницы. – Anigel

ответ

0

Если вам не нужно, чтобы получить "свежие" значения от $ facebook-> API ("/ я"). Тогда я предлагаю вам кэшировать ответ, если вы используете какую-либо фреймворк PHP (например, Zend, Yii, Codeigniter), это должно быть действительно прямолинейным.

Если вы не используете фреймворк PHP, я предлагаю вам по-прежнему изучать отличную документацию ZF для своего решения для кеша.

Zend Framework - Cache

Если, однако, нужны свежие значения от каждой нагрузки вы можете сделать простую страницу, которая возвращает только $ facebook-> API («/ я») часть и возвращает ее как голый HTML. Затем просто держите или похожий, чтобы получить ответ, когда он будет готов. Простое решение будет использовать JQuery и просто написать:

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

Добавьте прялку, где форма Войти является, а затем вызвать Аякса на документ, готовый к вашему PHP скрипт, скрипт возвращает ложь или loged в пользовательских данных (или более данные, если вам нужно - перенаправить URL-адрес), а затем в зависимости от формы отображения результатов для входа или отображения в настоящее время зарегистрированного пользователя.

Что я имею в виду Javascript будет обрабатывать всю логику в зависимости от того, что возвращается с сервера, редиректов, изменение пользовательского интерфейса и т.д.

Другой способ заключается в кэше (сеанс связи с истечением) первый вызов facebook, если пользователь loged в запомнить Это. И проверьте, присутствует ли эта переменная сеанса и еще не истекло. Повторите вызов только при выполнении некоторых важных задач или истекли.

+0

Я бы не предложил использовать javascript для целей аутентификации (например, перенаправление неавторизованного пользователя). - Но, возможно, я неправильно понял ваше предложение «Что я имею в виду, Javascript будет обрабатывать всю логику в зависимости от того, что возвращается с сервера, перенаправляет, изменяет интерфейс и т. Д.« – gernberg

+0

Вся логика аутентификации по-прежнему должна быть на сервере, и да, я предпочитаю не использовать javascript, но я не вижу проблемы безопасности, когда все обрабатывается с сервера. Что я имею в виду« логика », это интерфейс. –

2

Вы действительно не должны выполнять запрос API Facebook для каждой загрузки страницы. Делайте это только один раз, когда пользователь входит в систему. Затем вы можете сохранить флаг «вошел в систему» ​​в сеансе (или подписанный файл cookie).

Если вам необходимо хранить, например, некоторые данные профиля пользователя в facebook, также помещают его в сеанс или в вашу базу данных.

Смежные вопросы