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

2024-06-25

我有一个 Facebook 应用程序,在 IE 中运行时会永远循环。在其他浏览器中它工作正常。

我需要你的帮助来调试它,但在此之前我需要提及我是如何实现它的。

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

这在 Firefox 和 Chrome 中运行良好,但在 IE 中运行良好LoggedIn代码重定向后,会话中缺少标志appLogin阶段。事实上,在这种情况下,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政策 http://en.wikipedia.org/wiki/P3P您可以发送的 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 可以保护用户隐私。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的 FB 应用程序在 IE 中永远循环? 的相关文章

随机推荐

  • 您多久会看到滥用 C# 速记 getter/setter 的情况?

    在 C 中 您可以用比其他语言更简单的方式创建 getter setter public int FooBar get set 这将创建一个无法直接寻址的内部私有变量 可以使用外部属性 FooBar 直接访问它 我的问题是 您多久会看到这种
  • 使用 ASP.Net MVC 实现 .Net OpenId

    我下载的样本是从DotNetOpenId http code google com p dotnetopenid 与我创建新应用程序时获得的 MVC 1 0 应用程序有不同的文件 我对 MVC 和 openId 很陌生 我遇到的所有示例都非
  • Nuxt js全静态动态页面,payload未定义

    我正在尝试动态生成页面 运行 nuxt generated 后 页面已成功创建 但是加载页面 使用 nuxt start 它说标题未定义 我在生成时在有效负载中发送 每个生成的页面都存在有效负载 js 但由于某种原因它无法工作 Page r
  • 用于进程间共享内存的非 Boost STL 分配器?

    由于我工作地点的政策 我无法使用高于 1 33 1 的 Boost 版本 也无法使用高于 4 1 2 的 GCC 版本 是的 它是垃圾 但我对此无能为力 Boost 1 33 1 不包含进程间库 也就是说 我的一个项目需要放置一个std m
  • php 中每个数据库扩展的字符串如何转义?

    在任何人对这个问题的性质做出结论之前 我已经知道了参数化 准备好的语句 http en wikipedia org wiki Prepared statements Parameterized statements并尽可能使用它们 不幸的是
  • 矩形位于另一个矩形内

    是否可以像图片上那样从 xml 创建可绘制对象 第一个矩形包含第二个矩形 如果是 请向我解释一下如何做 如果你想要简单的矩形 你可以使用图层列表 http developer android com guide topics resourc
  • 使用 karma 生成指针向量的输出

    我在使用 karma 为 boost shared ptrs 向量中保存的结构生成输出时遇到一些麻烦 我有一个使用无法编译的整数的小测试用例 我在想我可以使用 deref iterator 自定义点来处理这种情况 或者开箱即用的精神可能会注
  • 具有变化比例的 gganimate(轴限制)

    我想使用创建一个 gifgganimate 但我的轴范围在一帧中变化很大 这导致所有后续帧都被挤压 In ggplot2的方面 有一个选择scales free 有没有办法让每一帧都有自由比例gganimate 这是一个例子 library
  • React 将图像 src 作为对象返回

    我有一个这样定义的变量 const team name Foo bio FooBar image foo name Bar bio FooBar image bar 图像导入的位置如下 import foo from assets foo
  • BlackBerry Curve 8520 中的“隧道失败”异常

    手机型号 bb curve 8520 手机版本 4 6 1 314 运营商 印度航空公司 接入点 airtelgprs com 没有用户名和密码 我正在使用以下代码 String url http
  • React 本机应用程序中未找到类相对布局错误

    有没有人可以告诉我这个错误是在我将闪屏设置为我的反应本机应用程序后启动的 我的应用程序在添加启动屏幕之前正在运行 我认为布局文件夹中的 launch screen xml 文件有问题 打开错误SS https i stack imgur c
  • 让 PHPmailer 成为 Gmail 的“更安全的应用程序”

    我们可以在 PHPmailer 中实施哪些安全措施 使其成为更安全的 Gmail 应用程序 https support google com accounts answer 6010255 https support google com
  • Laravel / Eloquent whereIn 为 null

    如何应用 Laravel 的 Eloquent whereIn 使其包含 null 我试过了 User whereIn column null 1 2 gt get And User whereIn column DB raw null 1
  • PHP 会话未保存在内存缓存中

    使用 Amazon Linux 在 AWS 上运行使用 php 5 4 的应用程序 PHP 版本是 PHP 5 4 28 从AWS存储库安装的memcache lib是php54 pecl memcache 3 0 8 1 11 amzn1
  • 如何解决此错误:Py4JJavaError:调用 o70.showString 时出错?

    目前我正在开发 PySpark 和 DataFrame 我创建了一个数据框 from pyspark sql import import pandas as pd spark SparkSession builder appName Dat
  • 不支持请求方法“POST”

    以下配置引发错误 请求方法 POST 不受支持 我已经读到 存储 api 不会请求使用 POST 方法的对象作为缓存中的键 但我不知道如何添加路由 该路由体现了这些请求的 networkOnly 策略 规格 设置取自https github
  • 如何在 Win 10 UWP 项目上查找本地 IP 地址

    我目前正在尝试将管理控制台应用程序移植到 Windows 10 UWP 应用程序 我在通过以下控制台代码使用 System Net Dns 时遇到问题 如何获取设备IP 这是我尝试移植的控制台应用程序代码 public static str
  • 如何在控制器中模拟 Automapper (IMapper)

    我正在尝试为现有的 MVC Web 应用程序编写单元测试 我在自动映射器中面临一些问题 IMapper 每当使用地图函数时它都会返回null value 我的控制器代码 public class UserAdministrationCont
  • Marshmallow 上的 getSerial() 方法

    我是 Java 和 android 新手 我基本上需要从我的设备检索硬件序列号 我尝试过以下方法 import android content import android os Build public static String rec
  • 为什么我的 FB 应用程序在 IE 中永远循环?

    我有一个 Facebook 应用程序 在 IE 中运行时会永远循环 在其他浏览器中它工作正常 我需要你的帮助来调试它 但在此之前我需要提及我是如何实现它的 FB 建议当用户尝试访问应用程序时 我们应该将用户重定向到应用程序授权页面 从那里