首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >阻止第三方cookies解决方法(facebook应用程序等)

阻止第三方cookies解决方法(facebook应用程序等)
EN

Stack Overflow用户
提问于 2012-07-25 00:17:50
回答 6查看 20.8K关注 0票数 19

默认情况下,苹果电脑上的Safari的Block cookies设置为From third parties and advertisers

如果嵌入的swf来自不同的域,它会使SharedObject停止工作。

这个问题并不新鲜:Safari 3rd party cookie iframe trick no longer working?

是否有人找到了解决方案(除了在每个请求中通过GET/POST参数传递会话ID之外)?

注意:我没有访问该网站,这是嵌入的swf,所以没有办法改变的超文本标记语言或放置任何JavaScript等。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-07-25 10:23:04

function setCookie(){
   if ( navigator.userAgent.indexOf('Safari') != -1 &&
        navigator.userAgent.indexOf('Chrome') == -1 ){
      window.open('safari.php','','width=200,height=100' );
   }
}

// then we set the cookie in safari.php

来源:http://www.reizbombardement.de/archives/safari-5-1-4-enforces-cookie-policy

//更新2013年7月23日

在Safari6之前,这种解决这个问题的糟糕方法一直有效。

请参阅下面的@Fabio Antunes和@ncubica评论。

//更新: 2013年7月23日,作者: Fabio Antunes

这是我的代码

在登录页面上,我们会有一个关于应用程序的简短描述和一个类似于"enter“的按钮。我使用jquery来简化这个过程,为click事件创建一个侦听器,我将只放入javascript代码,因为我假设您已经有了登录页面的其余html代码:

$(document).on("click", "#bt-landing", function(){
var left = (screen.width/2)-(500/2);
            var top = (screen.height/2)-(250/2);
            window.open('URL_FOR_THE_PHP_THAT_WILL_CREATE_THE_SESSION', '_blank', 'width=500,height=250,toolbar=0,location=0,menubar=0, top='+top+', left='+left);
});

这将打开一个小窗口,500 x 250像素,居中显示在屏幕上。

我为这个小窗口编写的代码如下:

<?php setcookie("safari_cookie", "1");?>
    <html>
        <head>
            <meta charset="utf-8">
            <title>THE NAME OF YOUR APP OR SOMETHING THAT THE USER WE'LL READ AND ASSUME THAT THIS SMALL WINDOW IS RELIABLE</title>
        </head>
        <body>
        <script type="text/javascript">
        $(document).ready(function(){
           setTimeout(function(){window.close()},1000);
        })
        </script>
        </body>
    </html
票数 12
EN

Stack Overflow用户

发布于 2013-07-16 23:35:02

Safari仍然阻止来自它在顶部窗口中未访问过的域的cookie。

为了解决这个问题,我们在PHP中计算($_COOKIES),并将浏览器定向到我们域中的一个页面,该页面的工作是简单地将浏览器发送回它来自的地方。这是一个肮脏的把戏,这意味着一些用户会不必要地被移走,然后又回来,但话说回来,网络上充满了肮脏的把戏。

如果你不能将top.location.href设置为域中需要设置cookie的页面,或者你不能修改该域中的页面,那么我可以自信地说,你将需要使用基于URL的会话。

然而,另一种选择(仍然需要能够在域中创建页面)是请求用户单击您的SWF,然后您可以触发window.open并让URL指向您创建的页面。它所需要做的就是成功加载,然后用户(甚至弹出页面上的JS )就可以关闭弹出窗口。然后,您可以设置cookies。

我开发了Facebook应用程序,这些应用程序位于iframe中,遇到了这个问题。每个单独的应用程序都必须附带此修复程序。

票数 11
EN

Stack Overflow用户

发布于 2012-07-25 00:29:09

我可以说,从最近的经验来看,这不是Mac上Safari的问题,我也从来没有体验过它是一个问题。

你提到的设置是阻止来自第三方的SharedObject :cookie存储永远不会来自第三方,它来自你访问的网站(第一方?)。所以我认为这永远不会是一个问题。

使用Flash Player设置面板,用户可以禁用SharedObject (或限制存储空间量)。因此,通常情况下,您的应用程序应该处理SharedObject不可用的情况。

然而,我认为大多数用户并不知道SharedObject,他们可以禁用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11635105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档