Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Safari会话变量中有多个页面的Facebook Iframe应用程序未持久化_Facebook_Safari - Fatal编程技术网

Safari会话变量中有多个页面的Facebook Iframe应用程序未持久化

Safari会话变量中有多个页面的Facebook Iframe应用程序未持久化,facebook,safari,Facebook,Safari,我有一个facebook Iframe应用程序,其中包含多个PHP页面 我有一些链接指向“iframe文件夹”中的文件 iframe中的会话变量存在一些问题。我设置了一些会话变量,但它们不会从一个页面持续到另一个页面 这在其他浏览器上也适用 我一直在读Safari不支持跨域Cookie,这可能是问题所在,但我不知道如何解决这个问题 有什么帮助吗?我在多米尼克的回答中提到了 问题是Safari的默认行为是只接受来自您访问的站点的cookie。这不包括“第三方”cookie。Safari将IFRAM

我有一个facebook Iframe应用程序,其中包含多个PHP页面

我有一些链接指向“iframe文件夹”中的文件

iframe中的会话变量存在一些问题。我设置了一些会话变量,但它们不会从一个页面持续到另一个页面

这在其他浏览器上也适用

我一直在读Safari不支持跨域Cookie,这可能是问题所在,但我不知道如何解决这个问题

有什么帮助吗?

我在多米尼克的回答中提到了

问题是Safari的默认行为是只接受来自您访问的站点的cookie。这不包括“第三方”cookie。Safari将IFRAME中的页面视为第三方站点,在您与该内容交互(例如,通过单击链接)之前,Safari将拒绝这些cookie

您的PHP代码需要在使用会话的第一个页面上设置cookie,以便会话从一个页面持续到另一个页面,但是如果会话变量位于IFRAME的第一个页面中,则会出现鸡和蛋的问题

我的解决方案是保留所有特殊的Facebook参数,直到加载到IFRAME的第二个页面。因为您已经与它进行了交互,所以第二个页面上设置的cookie将保持不变,这允许您的PHP代码保持与Facebook通信所需的任何状态


不过,这可能对您的PHP会话没有帮助,因此我建议在第一个页面的链接中添加另一个参数,以便第二个页面可以查找会话或以其他方式重新创建会话。

我认为最新(6.0及更高版本)的Safari已经过时了此解决方案。

Safari默认不允许从第三方设置cookie。这会影响Facebook iframe应用程序,因为用户正在访问从
apps.Facebook.com
提供的页面,但iframe是从
yourdomain.com
提供的,在这种情况下,iframe是“第三方”

网络上提到了几种解决方案。我发现的最好的方法,也是Facebook推荐的方法之一,就是使用JQuery向
yourdomain.com
伪造一个发帖请求。此解决方案由详细介绍,通常适用于不同的主机/iframe域,需要针对Facebook应用程序进行调整。关键部分是:

$(“正文”).append('
');
var firstTimeSession=0;
函数submitSessionForm(){
if(firstTimeSession==0){
firstTimeSession=1;
$(“#sessionform”).submit();
}
}

另一个解决方案是使用Javascript函数为页面上的每个链接插入会话信息。然后通过从GET参数中读取此会话信息来修改服务器代码以捕获此会话信息。

谢谢您的所有输入。我最终解决了这个问题,在每一页上都添加了“signed_request”参数。我只是把它作为一个隐藏字段放在后面的代码中。通过这种方式,我成功地让它在Safari中发挥作用。希望它也适用于您。

如果您使用.NET,则有一个更简单的解决方案

只需在web.config中将cookieless设置为false。例:

sessionState mode="InProc" cookieless="true" timeout="60" 
这比发布iframe或打开带有iframe url的弹出窗口容易得多

亲切问候,


David

我认为最好的解决方案是手动跟踪会话ID,即使用
session\u ID($\u GET['session])只需确保在调用
会话_start()之前执行此操作即可一切正常。

Safari只从用户导航到的页面接受cookie。解决此问题最简单、最有效的方法是使用
top.location.href
将请求从画布应用程序的登录页重定向到域中的其他页面,并将用户从该页面重定向回画布应用程序

例如,如果abc.php是您的登录页,画布URL是facebook.com/abc。首先将请求从abc.php重定向到另一个页面,如xyz.php,然后再次从xyz.php重定向到facebook.com/abc。不要忘记在xyz.php中启动会话


这是一个简单的修复…

我在PHP中使用了这个标题,它修复了我的问题

if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ) header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');

随着Safari 7的发布,不仅第三方cookie被阻止。本地存储以及WebDB,任何类型的网站数据都被阻止。当你进入Safari 7的隐私标签下的Safari首选项(CMD+逗号)时,它现在显示:“阻止cookies和其他网站”,最初是“阻止cookies”。这证实了这些变化

其他浏览器将来可能也会这样做。很可能是Firefox。铬,咳嗽,咳嗽,可能不会


您可能需要使用重定向技术或类似Discus的弹出窗口来解决问题。

Steve,我使用的是单点登录facebook身份验证。Facebook为我的托管域设置cookie以提供单点登录。但是,正如你提到的,safari会拒绝它。该应用程序还存在着facebook没有cookie的问题。如果我正在设置cookie,情况就不同了。有人能确认此解决方案在最近的Safari版本中不起作用吗?我的项目中的第三方cookie也有类似问题。但是这个解决方案对我没有帮助。。。我尝试将cookieless设置为false、UseUri、AutoDetected。但我有一个例外。也许这是一个原因:“当您配置一个支持AJAX的ASP.NET网站时,只使用默认值UseCookies作为cookieless属性。ASP.NET AJAX客户端脚本库不支持使用URL中编码的cookies的设置。”@UğurÖzpınar是的,现在除了在页面之间传递会话之外,没有其他方法。Safari用最近谷歌侵犯隐私的惨败修复了这个假的帖子。谢谢你的回答!太容易了!=)但既然这个答案被否决了很多,我想知道它的缺点是什么?