Safari和php会话无法在facebook iframe中运行

use*_*165 7 php safari iframe facebook session-variables

我有一个问题,让我的Facebook应用程序在Safari上工作.

该问题与PHP会话变量有关.

我知道Safari在处理跨域会话(在iframe内部)时遇到问题,我找到了两种类型的解决方案:

  1. 设置p3p标题:我已经尝试了很多p3p标头,但没有一个工作[例如:header('P3P: CP="NOI ADM DEV COM NAV OUR STP"');].
  2. 使用javascript将帖子发送到iframe.这会创建交互,会话应该有效.但事实是我不控制iframe容器,因为那是facebook.

有没有人知道另一种解决方案?

谢谢!

pm_*_*pm_ 4

编辑:已确认,此解决方法不再适用于 Mac 上的 Safari 5.1。这里讨论:Safari 3rd party cookie iframe 技巧不再起作用?

我不知道您的用例是什么,但在我们的应用程序中,我们有一个欢迎屏幕,其中有一个“允许访问”按钮,可打开权限对话框。当用户单击“允许访问”时,我使用它打开一个新窗口,该窗口设置会话并立即关闭(这是在上面链接的问题中提出的)。用户允许访问后,您可以重新加载页面吗?在我们的例子中,这不是必需的,因为与服务器的所有通信都是通过 ajax 进行的。


我正在使用第二种解决方案,没有任何问题,这是我的代码(使用 jQuery):

/**
 * Hack for Safari cross-domain cookies. See: 
 * http://anantgarg.com/2010/02/18/cross-domain-cookies-in-safari/
 */

$(document).ready( function() {

    var isSafari = (/Safari/.test(navigator.userAgent));

    if (isSafari) {
        var iframe = $( "<iframe />" );
        iframe.attr( "id", "cookieframe" );
        iframe.attr( "name", "cookieframe" );
        iframe.hide();

        var form = $( "<form />" );
        form.attr( "id", "cookieform" );
        form.attr( "target", "cookieframe" );
        form.attr( "enctype", "application/x-www-form-urlencoded" );
        form.attr( "action", "startsession.php" );
        form.attr( "method", "post" );

        $("body").append( iframe );
        $("body").append( form );
        form.submit();
    }

} );
Run Code Online (Sandbox Code Playgroud)

在startsession.php中我刚刚开始会话:

<?php session_start();
Run Code Online (Sandbox Code Playgroud)