默认情况下,苹果电脑上的Safari的Block cookies
设置为From third parties and advertisers
。
如果嵌入的swf来自不同的域,它会使SharedObject停止工作。
这个问题并不新鲜:Safari 3rd party cookie iframe trick no longer working?
是否有人找到了解决方案(除了在每个请求中通过GET/POST参数传递会话ID之外)?
注意:我没有访问该网站,这是嵌入的swf,所以没有办法改变的超文本标记语言或放置任何JavaScript等。
发布于 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
发布于 2013-07-16 23:35:02
Safari仍然阻止来自它在顶部窗口中未访问过的域的cookie。
为了解决这个问题,我们在PHP中计算($_COOKIES),并将浏览器定向到我们域中的一个页面,该页面的工作是简单地将浏览器发送回它来自的地方。这是一个肮脏的把戏,这意味着一些用户会不必要地被移走,然后又回来,但话说回来,网络上充满了肮脏的把戏。
如果你不能将top.location.href
设置为域中需要设置cookie的页面,或者你不能修改该域中的页面,那么我可以自信地说,你将需要使用基于URL的会话。
然而,另一种选择(仍然需要能够在域中创建页面)是请求用户单击您的SWF,然后您可以触发window.open
并让URL指向您创建的页面。它所需要做的就是成功加载,然后用户(甚至弹出页面上的JS )就可以关闭弹出窗口。然后,您可以设置cookies。
我开发了Facebook应用程序,这些应用程序位于iframe中,遇到了这个问题。每个单独的应用程序都必须附带此修复程序。
发布于 2012-07-25 00:29:09
我可以说,从最近的经验来看,这不是Mac上Safari的问题,我也从来没有体验过它是一个问题。
你提到的设置是阻止来自第三方的SharedObject :cookie存储永远不会来自第三方,它来自你访问的网站(第一方?)。所以我认为这永远不会是一个问题。
使用Flash Player设置面板,用户可以禁用SharedObject
(或限制存储空间量)。因此,通常情况下,您的应用程序应该处理SharedObject
不可用的情况。
然而,我认为大多数用户并不知道SharedObject
,他们可以禁用它。
https://stackoverflow.com/questions/11635105
复制相似问题