在 Safari 上设置跨站点 Cookie



有两个网站:AB。我希望打开网站的用户B被重定向到另一个网站(例如 http://example.com ( 如果他们没有访问该网站A.

为此,我尝试在网站B上设置一个cookie(只需在网站A上加载一个页面,设置cookie(。打开网站时B我会检查该cookie。

这很好用,除了在 Safari 上。野生动物园阻止在网站B上设置 cookie .我搜索了很多,发现 Safari 默认阻止第三方 cookie。

该问题的另一种解决方案可能是使用 Referer 标头(当单击网站上的链接时A引用将被发送到网站 B(——这对于不想被跟踪的用户来说失败,他们禁用了 referer 标头。

有没有一个简单的解决方案来解决这个问题,而没有我们存储ips或类似东西的数据库?

这是我目前拥有的代码:

Website B index.php

<?php
$cookie_name = "visited_first_website";
if(isset($_COOKIE[$cookie_name]) ) {
    echo "Visited";
} else {
    $newURL = "https://example.com";
    header('Location: '.$newURL);
}
?>

这在网站 A 上运行,使用 B/set-cookie.js .

window.addEventListener("DOMContentLoaded", function () {
    var iframe = document.createElement("iframe");
    //iframe.style.display = "none";
    var scripts = document.getElementsByTagName("script");
    var src = scripts[scripts.length - 1].src;
    var websiteBAddress = src.match(new RegExp("https?://[^/]*"))[0];
    iframe.setAttribute("src", websiteBAddress + "/js/embed.php");
    document.body.appendChild(iframe);
});

embed.php文件如下所示:

<?php
$cookie_name = "visited_first_website";
$cookie_value = time();
setcookie($cookie_name, $cookie_value, time() + (86400 * 2), "/"); // 86400 = 1 day
header('Access-Control-Allow-Origin: *');
?>
<!DOCTYPE html>
<html>
<body>
</body>
</html>

那么,解决此问题的最简单工作流程是什么?

我也尝试加载图像标签,但它不起作用:

<img src="B/js/embed.php">

似乎不可能实现。Safari 仅接受来自用户导航到他/她自己的页面的 Cookie。

早在 2010 年就有一个相当笨拙的解决方法(来源(,但 2013 年及以后的评论指出它不再有效。到目前为止,我尝试了这些事情:

  • 2010年的原始黑客(原始和一些变体(。
  • 通过以 iFrame 为目标的后表单元素请求页面。
  • 加载初始化会话的脚本(设置cookie(通过...
    • 图像标签
    • 脚本标记
    • AJAX-call via jquery

一切都没有任何成功。我发现即使是谷歌地图和分析词也没有在Safari中设置任何cookie。

可以通过链接

加载页面来规避此问题,该链接设置cookie,然后立即重定向到带有嵌入式iFrame的页面。我没有测试这种方法,因为它不能满足我们在可用性和美学方面的需求。当可以通过深层链接访问带有 iFrame 的页面时,请谨慎使用它!

相关内容

  • 没有找到相关文章