php – 为什么我的FB应用程序在IE中永远循环?
我有一个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对用户隐私是否正常. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |