【问题标题】:Facebook iFrame canvas app PHP sessions issueFacebook iFrame 画布应用 PHP 会话问题
【发布时间】:2012-04-11 11:39:51
【问题描述】:

我在过去一天半的时间里一直在解决一个问题,但仍未找到解决方案。

当在 facebook(在 facebook 的 iFrame 中)访问我的游戏时,php 会话不起作用。这适用于 IE 和 Safari。 Chrome 运行良好。

我已经阅读了堆栈上有关此问题的所有帖子,这似乎取决于第三方 cookie 安全性并且需要首先与 iFrame 交互。有一种解决方法是先让 javascript 将一些表单数据发布到 iFrame,但这似乎已在最近版本的浏览器中“修复”,因为这不再有效。

我什至尝试实现一个起始页面,该页面要求他们首先单击一个链接(在 iFrame 中)以加载另一个页面,然后创建会话。但即使这样也行不通。

我什至在使用 javascript 在 iF​​rame 中加载新页面时也遇到了问题,这似乎总是导致无限循环刷新。

不,P3P 标头不能解决它。

有没有人能解决这个问题?考虑到存在多少 Facebook 应用程序,我不能是唯一一个拥有它的人!

【问题讨论】:

  • 您有正确的 p3p 策略吗?我有很多 FB 应用程序,会话问题总是通过正确的 p3p 标头解决
  • 即使是野生动物园?你能给我一个你的标题的例子吗?我想我插入了: header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"');无济于事。

标签: facebook internet-explorer session iframe safari


【解决方案1】:

我在使用禁用了“接受第三方 cookie”的客户端时遇到了这个问题。我的解决方案是通过将此行放在每个页面的开头来强制 PHP 将会话 ID 嵌入到 URI 中:

ini_set('session.use_trans_sid', true);

由于 URL 位于 Facebook 的 iframe 中,因此 SID 不会在顶部窗口中显示。

【讨论】:

  • 我也一直在努力解决这个问题,这个答案让我发现我也禁用了“接受第三方 Cookie”。对于每个人来说,这似乎都是一个潜在的主要问题,所以我很惊讶 Facebook 或其他教程中没有提到这一点。
【解决方案2】:

对于 IE,您需要设置 P3P 标头。比如:

<?php header('P3P: CP="CAO PSA OUR"'); ?>

默认情况下,Safari 会阻止第 3 方 cookie。目前,唯一对我有用的解决方法是“弹出”一个新窗口来设置 cookie。我有这样的事情:

<script type="text/javascript">
    function safariFix(){
        if (navigator.userAgent.indexOf('Safari') != -1 && navigator.userAgent.indexOf('Chrome') == -1){
            window.open('https://yourdomainname.com/safari.php', 'Safari Fix','width=100,height=100');
        }
    }
</script>

safari.php 会有这个:

<?php 
setcookie("safari_test", "1");
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Safari Fix</title>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> 
    </head>
    <script type="text/javascript">
    $(document).ready(function(){
        window.close();
    });
    </script>
    <body>
        Since Safari does not accept third-party cookies by default, we are forced to open this window.
        This window will automatically close once we have set the cookies.
    </body>
</html>

问题:如果用户在 Safari 中启用了“阻止弹出窗口”,这将不起作用。如果有人对此有更好的解决方案,请告诉我;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多