使用Internet Explorer永久重新加载页面

时间:2011-11-02 17:53:29

标签: facebook internet-explorer-7 load p3p

我的FB应用程序与Internet Explorer 7有问题。

我正在使用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"'>

但这三个选项都不适用于我,我的应用程序仍然永远加载。

有人有线索吗?

提前致谢!


好吧,我读了一些关于同一问题的论坛:

但这些解决方案都不适合我,我仍然有这个永恒的重装页面问题。

我还阅读了一个我认为能解决问题的论坛 - http://adamyoung.net/IE-Blocking-iFrame-Cookies - 但又一次......没有运气。

任何人都可以帮助我???

2 个答案:

答案 0 :(得分: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 PHP SDK,http://developers.facebook.com/docs/reference/php/,这使得编写Facebook应用程序变得更容易。

编辑:使用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会话。发现在这篇文章中: How to properly handle session and access token with Facebook PHP SDK 3.0?

答案 1 :(得分:1)

https://gist.github.com/2765933在Sinatra / Ruby中有一个帮助我解决这个问题的解决方案!

我发现它是p3p问题,我只是想发布一些示例代码给任何在我之后发现这个问题的人。

相关问题