加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 为什么我的FB应用程序在IE中永远循环?

发布时间:2020-12-13 22:19:00 所属栏目:PHP教程 来源:网络整理
导读:我有一个Facebook应用程序,它在IE中运行时永远循环.在其他浏览器中它工作正常. 我需要你的帮助来调试这个,但在此之前我需要提一下我是如何实现它的. FB建议当用户尝试访问应用程序时,我们应该将用户重定向到应用程序授权页面.从那里FB将重定向(使用302代码)
我有一个Facebook应用程序,它在IE中运行时永远循环.在其他浏览器中它工作正常.

我需要你的帮助来调试这个,但在此之前我需要提一下我是如何实现它的.

FB建议当用户尝试访问应用程序时,我们应该将用户重定向到应用程序授权页面.从那里FB将重定向(使用302代码)到我们喜欢的网址.在这种情况下,我要求FB在查询字符串中使用标志appLogin = 1重定向到我的应用程序的URL.但是,随着FB在查询字符串中附加一个非常长的参数代码,这非常难看.因此,在这种情况下,我在我的PHP会话中放置了一个标志LoggedIn,并使用JS代码window.top.location.href =< app url>将用户重定向回应用程序URL.这会清除位置栏中的URL.

这在Firefox和Chrome中运行良好,但在代码从appLogin阶段重定向后,会话中缺少IE LoggedIn标志.事实上,PHP会话似乎已重置.这使我的应用程序感到困惑,认为这是一个初始请求,因此它将用户重定向到授权页面.

我希望上述内容有道理.非常感谢任何见解.

UPDATE1:

按照要求.这是代码片段.

$reset = false;
$topRedirect = true;

if (isset($_REQUEST['appLogin'])) {
    resetSession();
}
session_start();

$facebook = new Facebook(array(
  'appId' => $AppId,'secret' => $AppSecret,'cookie' => true,));

if (isset($_REQUEST['appLogin'])) {//Comes here when appLogin is set,i.e. we have just been redirected here from OAuth (authorization) page.

    if (isset($_REQUEST['error'])) {
        if ($_REQUEST['error_reason'] === 'user_denied') {
            $msg = "You need to click on 'Allow',so that this App can fetch the data needed.";
            $allowRetry = true;
            include('error.php');
        }
    }

    $authToken = $facebook->getUserAccessToken(); //This was originally protected. Made public for my purpose.
    if ($authToken === false) {
        //If no user token found and it wasn't even an error then this is totally unexpected.
        $msg = "Totally unexpected error occurred!";
        $allowRetry = true;
        logErr($msg);
        include('error.php');
    }

    $_SESSION['LoggedIn'] = 1;
    $reset = false;
    $url = $AppUrl; //We redirect again to clean the url.
    include('redirect.php');
} else {
    if (!isset($_SESSION['LoggedIn']) || $facebook->getUserAccessToken() === false) {
        //If we are here then this is an initial request.
        $reset = false;
        $url = $OAuthUrl;
        include('redirect.php');
    }
}

$accessToken = $facebook->getAccessToken();

UPDATE2:

包含的文件 – redirect.php和error.php在完成处理时调用exit().所以他们之后的代码不会被执行.

解决方法

这是重定向的问题. IE处理它们的方式不同

您可以使用您可以发送的简单P3P policy HTTP标头来解决这个问题:

P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"

在PHP中,那将是:

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

原因是IE在使用框架时需要P3P策略,因为您的应用程序在iframe内部运行且其父级属于不同的域(这种情况下为Facebook.com),因此cookie将不起作用(除非正在设置P3P策略) .由于cookie不起作用,那么您可能正在使用用于登录Facebook的重定向进行循环.

解决方案:需要实现P3P标头告诉浏览器iframe中的应用程序的cookie对用户隐私是否正常.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读