Facebook iFrame画布应用PHP会话问题

5

我已经花了一天半的时间来处理一个问题,但仍然没有找到解决方案。

访问我的 Facebook 游戏(在 Facebook 的 iFrame 中)时,php 会话不起作用。这适用于 IE 和 Safari。Chrome 没有问题。

我已经阅读了关于此问题的所有帖子,看起来是第三方 cookie 安全性和需要首先与 iFrame 交互引起的问题。通过让 JavaScript 首先将一些表单数据发布到 iFrame 中来实现的解决方法,但由于最近浏览器的最新版本已经“修复”了这个问题,因此这种方法不再行之有效。

我甚至尝试实施一个起始页面,要求他们首先在 iFrame 中点击链接以加载另一页,然后才能创建会话。但即使如此,也无法解决问题。

我还在使用 JavaScript 加载 iFrame 中的新页面时遇到了麻烦,似乎总是导致无限循环刷新。

并且,P3P 标头也不能解决此问题。

有人有解决此问题的方法吗?考虑到存在多少 Facebook 应用程序,我肯定不是唯一遇到这个问题的人!


你是否有正确的P3P策略?我有许多FB应用程序,只要使用正确的P3P标头,会话问题总是能够得到解决。 - scibuff
即使对于Safari浏览器也是如此吗?你能给我一个你的头部信息的例子吗?我认为我插入了:header('p3p: CP="NOI ADM DEV PSAi COM NAV OUR OTR STP IND DEM"'); 但没有效果。 - Dom Chapman
2个回答

5

我遇到了一个问题,使用的客户端禁用了"接受第三方cookie"。我的解决方案是通过在每个页面开头添加以下代码来强制PHP将会话ID嵌入URI中:

ini_set('session.use_trans_sid', true);

由于URL以Facebook中的iframe形式存在,因此在顶部窗口中看不到SID。

我也一直在为这个问题苦苦挣扎,但是这个答案让我发现我也禁用了“接受第三方 Cookie”。这似乎是每个人都可能遇到的一个潜在重大问题,所以我很惊讶在 Facebook 或其他教程中没有提到过。 - Zimzat

3

对于IE浏览器,您需要设置P3P Headers。类似于:

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

Safari默认阻止第三方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浏览器中启用了“阻止弹出窗口”,则此方法将无法正常工作。如果有更好的解决方案,请告诉我;)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接