1

Internet Explorer 7 で FB アプリに問題があります。

少し前にFBから提供されたこのコードを使用しています:

$auth_url = "http://www.facebook.com/dialog/oauth?client_id=" 
        . FACEBOOK_APP_ID . "&redirect_uri=" . urlencode(CANVAS_PAGE . 'index.php') . "&scope=user_likes,publish_stream";

$signed_request = $_REQUEST["signed_request"];

list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

$data = json_decode(base64_decode(strtr($payload, '-_', '+/')), true);

// If first time we use the application -> ask for permissions
if (empty($data["user_id"]))
{
    echo("<script> top.location.href='" . $auth_url . "'</script>");
}   
// else display the page code
else
{
    }

このコードを使用すると、ページは正しく読み込まれますが、1 秒後に再読み込みが行われるため、使用できなくなります。

行のコメントを外すことによって

    echo("<script> top.location.href='" . $auth_url . "'</script>");

問題は解決しました(ところで、私の場合、コードはこの行を実行すべきではありません...使用されていないコード行のコメントを外すと問題が解決するのはとても奇妙ですが、とにかく...)

いくつかのフォーラムを読んだ後、この問題は P3P ヘッダー関連の問題であるという印象を受けました。だから私はこの行を追加しようとしました:

header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"');

body タグの後。また、ボディタグの直前に追加しようとしましたが、最終的にメタタグとして追加しようとしました:

<meta http-equiv="P3P" content='CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM CURa ADMa PHY ONL COM STA"'>

しかし、これらの 3 つのオプションはどれもうまくいきませんでした。私のアプリはまだ永遠に読み込まれます。

誰にも手がかりがありますか?

前もって感謝します!


さて、私は同じ問題に関連するいくつかのフォーラムを読みました:

しかし、これらの解決策はどれも私にとってはうまくいきませんでした.

私の問題を解決すると思ったフォーラムも読みました - http://adamyoung.net/IE-Blocking-iFrame-Cookies - しかし、やはり...運が悪いです。

誰でも私を助けることができますか?

4

2 に答える 2

3

コードを機能させることもできませんでした。リロードしただけです。$_REQUEST["signed_request"] が設定されていないようです。

しかし、 http://developers.facebook.com/docs/authentication/のコードで動作するようになりました

   <?php
   $app_id = "your app id";
   $app_secret = "your app secret";
   $my_url = "your app url";

   session_start();
   $code = $_REQUEST["code"];

   if(empty($code)) {
     $_SESSION['state'] = md5(uniqid(rand(), TRUE)); //CSRF protection
     $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" 
       . $app_id . "&redirect_uri=" . urlencode($my_url) . "&state="
       . $_SESSION['state'];

     echo("<script> top.location.href='" . $dialog_url . "'</script>");
   }

   if($_REQUEST['state'] == $_SESSION['state']) {
     $token_url = "https://graph.facebook.com/oauth/access_token?"
       . "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
       . "&client_secret=" . $app_secret . "&code=" . $code;

     $response = file_get_contents($token_url);
     $params = null;
     parse_str($response, $params);

     $graph_url = "https://graph.facebook.com/me?access_token=" 
       . $params['access_token'];

     $user = json_decode(file_get_contents($graph_url));
     echo("Hello " . $user->name);
   }
   else {
     echo("The state does not match. You may be a victim of CSRF.");
   }

とはいえ、Facebookアプリのプログラミングを容易にするFacebook PHP SDK ( http://developers.facebook.com/docs/reference/php/ ) を使用することをお勧めします。

編集: PHP SDK の使用

PHP SDK で認証するには、次のようにします。

// update this to where you've stored the facebook PHP SDK
require '../src/facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'your app id',
  'secret' => 'your app secret',
));

$user = $facebook->getUser();
if ($user) {
  print "You've logged in!";
} else {
  echo("<script> top.location.href='" . $facebook->getLoginUrl() . "'</script>");
}

編集: ヘッダー

また、コードの最初の行でこれを設定してみてください。

ini_set('session.use_trans_sid', 1);
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

これは、アプリで fb セッションが失われることがあるときに役立ちました。この投稿でそれを見つけました: Facebook PHP SDK 3.0 でセッションとアクセストークンを適切に処理するには?

于 2011-11-08T22:31:09.053 に答える
1

https://gist.github.com/2765933には、この問題の解決に役立つ Sinatra/Ruby のソリューションがあります。

p3p の問題であることがわかりました。後でこれを見つけた人のためにサンプル コードを投稿したかっただけです。

于 2012-05-22T01:24:33.897 に答える