gpt4 book ai didi

php - Safari 和 php session 在 facebook iframe 中不起作用

转载 作者:可可西里 更新时间:2023-11-01 12:54:34 24 4
gpt4 key购买 nike

我在让我的 Facebook 应用程序在 Safari 上运行时遇到问题。

问题与 PHP session 变量有关。

我知道 Safari 在处理跨域 session (在 iframe 内)时存在问题,我发现了大约 2 种解决方案:

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

有人知道替代解决方案吗?

谢谢!

最佳答案

编辑: 已确认,此解决方法不再适用于 Mac 上的 Safari 5.1。此处讨论:Safari 3rd party cookie iframe trick no longer working?

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

} );

在 startsession.php 中,我刚刚开始 session :

<?php session_start();

关于php - Safari 和 php session 在 facebook iframe 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991451/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com