有两个网站:A和B.我希望打开网站B的用户如果没有访问网站A,就会被重定向到另一个网站(例如http://example.com).
为此,我尝试在网站B上设置一个cookie(只需在网站A上加载一个页面,设置cookie).打开网站B时,我会检查该cookie.
除了在Safari上,这很好用. Safari阻止在网站B上设置cookie.我搜索了很多,发现Safari默认阻止第三方cookie.
该问题的另一个解决方案可能是使用Referer标头(当点击网站A上的链接时,引用者将被发送到网站B) – 这对于不想被跟踪并且他们禁用了引用标头的用户来说是失败的.
有没有一个简单的解决方案来解决这个问题,没有一个我们存储ips或类似东西的数据库?
这是我目前的代码:
网站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年(source)有一个相当hacky的解决方法,但2013年及以后的评论表明它不再起作用了.到目前为止我尝试过这些东西:
> 2010年的原始黑客(原始和一些变化).
>通过以iFrame为目标的post-form-element请求页面.
>通过…加载初始化会话的脚本(设置cookie)
> img-tag
> script-tag
>通过jquery调用AJAX
一切都没有成功.我发现甚至谷歌地图和分析都没有在Safari中设置任何cookie.
有可能通过链接加载页面来规避问题,该链接设置一个cookie,然后立即重新定向到嵌入iFrame的页面.我没有测试这种方法,但因为它不能满足我们对可用性和美学的需求.当通过深层链接访问带有iFrame的页面时,请谨慎使用此功能!