拥有两个网站:A
和B
。我希望打开网站B
的用户重新定向到其他网站(例如http://example.com
),如果他们没有访问网站A
。
为此,我尝试在网站B
上设置Cookie(只需加载网站A
上的网页,设置Cookie)。打开网站B
时,我会检查该Cookie。
除了Safari之外,这很好用。 Safari阻止在网站B
上设置cookie。我搜索了很多,发现Safari默认阻止第三方cookie。
该问题的另一个解决方案可能是使用Referer
标题(当点击网站A
上的链接时,引用者将被发送到网站B
) - 这对用户来说是失败的不想跟踪,他们禁用了引用标题。
这个问题是否有一个简单的解决方案,没有我们存储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">
答案 0 :(得分:2)
这似乎是不可能实现的。 Safari仅接受用户导航的页面中的cookie。
2010年有一个相当狡猾的解决方法(source),但2013年及以后的评论表明它不再起作用了。到目前为止我尝试过这些东西:
一切都没有成功。我发现即使谷歌地图和分析也不会在Safari中设置任何cookie。
有可能通过链接加载页面来规避问题,在此之后立即设置cookie,并使用嵌入的iFrame重定向到页面。我没有测试过这种方法,但因为它不能满足我们对可用性和美学的需求。当通过深层链接访问带有iFrame的页面时,请谨慎使用此功能!