3

私はfacebook php sdkを実装しており、ユーザーのログイン/接続に使用しています。すべてが期待どおりに機能しますが、各ページの上部で $facebook->api('/me') を呼び出して、ユーザーがログインしているかどうかを判断する必要があります..

この呼び出しは非常に遅く、返されるまでに最大 2 秒かかる場合があります。

そのため、ユーザーによる操作には、ページが読み込まれる前に常に 1 ~ 2 秒の遅延があります。

$facebook->api('/me') 呼び出しが httpsS を使用しているためだと思います..

助言がありますか....

          $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 */
           }
4

3 に答える 3

2

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

たとえば、ユーザーの Facebook プロフィール情報の一部を保存する必要がある場合は、それもセッションまたはデータベースに入れます。

于 2012-05-02T15:16:18.247 に答える
0

ログインフォームがある場所に回転するホイールを追加し、ドキュメントの準備ができている php スクリプトで ajax を呼び出します。スクリプトは false を返すか、ログインしているユーザーデータ (または必要に応じてさらに多くのデータ - リダイレクト URL) を返し、結果に応じてフォームを表示してログインまたは表示します。現在ログインしているユーザー。

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

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

于 2012-05-02T15:13:58.010 に答える