2012-05-02 3 views
3

私はfacebook php sdkを実装し、それをユーザーのログイン/接続に使用しています。 すべてはこの呼び出しがあるFacebook接続が非常に遅いですが、AJAXを使用できますか?

..ユーザーがたりないログインしているかどうかを判断するために期待される、しかし、各ページの上部に、私が呼び出す必要が $ facebook-> API(「/私」)として動作します非常に遅く、場合によっては2秒以内に戻ることがあります。

ので、ユーザによる対話、常に1~2秒遅れの任意のページがロードされる前に...

I疑う、それだから、$ facebook-> API(「/私」)の呼び出しをされています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( '私')を呼び出すことができますか? –

+0

あなたの質問への答えは:はい、できます:) – Oerd

+0

それが答えに依存するページの唯一のセクションであれば、はい、AJAXを使用してください。とにかく残りのページのコンテンツの一部をレンダリングする前に答えを待たなければならないでしょう – 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スクリプトへの準備ができて、文書にAJAXを呼び出し、スクリプトが虚偽またはユーザデータにloged(またはそれ以上返しますデータが必要な場合 - リダイレクトURL)、結果に応じてフォームを表示するか、現在ログインしているユーザーにログインするか表示します。

私はJavascriptがサーバから返されたものに応じてすべてのロジックを処理します何を意味、リダイレクト、UIを変更するなど

もう一つの方法は、ユーザーが覚えているにlogedされている場合のFacebookへの最初の呼び出しを(有効期限とのセッション)をキャッシュすることですそれ。そのセッション変数が存在し、まだ有効期限切れでないかどうかを確認します。機密性の高いタスクを実行する場合や期限切れになった場合にのみ、再度コールしてください。

+0

私は、認証目的のためにjavascriptを使用することを勧めません(例えば、許可されていないユーザーのリダイレクト)。 - おそらく、私はあなたの文章を誤解しています。「サーバーからの返信、リダイレクト、UIの変更などによって、Javascriptはすべてのロジックを処理します。" – gernberg

+0

すべての認証ロジックはまだサーバー上になければなりません。はい、私はjavascriptを使用しない方が良いですが、サーバーからすべてが処理されるとセキュリティの問題は発生しません。 –

2

実際には、ページロードごとにFacebook APIリクエストを実行すべきではありません。ユーザーがログインすると一度だけ実行します。その後、セッション(または署名されたCookie)に「ログイン」フラグを保存できます。

たとえば、ユーザーのFacebookのプロフィール情報の一部は、セッションやデータベースにも入れます。