Safari和iframe中的cookies

6

Safari浏览器默认会阻止第三方cookie。

我有一个主站点A,在iframe中加载一个被框架的站点B。站点B需要设置一些cookie(当用户点击按钮时),以便正常运行。这些cookie被称为第三方cookie,因为它们不是由站点A设置的。

所以我找到了这个解决方案:https://github.com/vitr/safari-cookie-in-iframe

但在我的情况下,它不起作用,因为要设置cookie,用户首先必须单击一个按钮。

实际上,framed.html就像这样:

<!DOCTYPE html>
<html>
<head>
    <title>Framed Page</title>
</head>
<body style="background-color: lightcoral;">
<h2>This is the framed site</h2>

<div border="0" class="cookie_button" id="continue_button" onclick="SetCookie('cookieAcceptanceCookie','accepted',9999);">accept</div>
</body>
</html>

有没有解决我的问题的方案?

“但在我的情况下,它不起作用,因为要设置cookie,用户首先必须点击一个按钮。” - 那么这怎么阻止你做与文章中描述的相同的事情呢?无论是自动重定向到另一个域还是仅在单击发生时执行 - 有什么区别吗? - CBroe
如果您担心它会过分打断流程,那么您需要提前处理它(即使用户事后可能对该功能不感兴趣),或者您可以通过弹出窗口来处理。第三方域作为“第一方”访问是最重要的事情;无论是通过当前窗口中的重定向还是在外部上下文中(例如弹出窗口)访问都不应该真正重要。(弹出窗口拦截器在特定情况下可能会给您带来更多麻烦这是另一个问题。) - CBroe
2个回答

4

对我有效的唯一解决方法是通过iframed域名进行一次重定向。

因此,如果您有abc.com,而xyz.com是在abc.com下的iframe,当着陆到abc.com时,需要通过xyz.com进行中间重定向,只为设置一个空cookie。然后Safari将允许从iframe为xyz.com设置cookie。

我不确定是否有其他更好的解决方法。但是,这个方法有效并且达到了我的目的。

谢谢。


你救了我的一天。 - Kubadev
1
它在 Safari 13+ 上不再工作。无论如何,它都会阻止Cookie。 - Lakin Mohapatra
你现在找到这个问题的解决方案了吗?请分享示例代码。 - user2030613
是的,Safari 13.1.1正在阻止这种方法。 - Mike Flynn

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接