【发布时间】:2016-05-12 11:17:03
【问题描述】:
拥有两个网站:A 和 B。我希望打开网站B 的用户在没有访问网站A 时被重定向到另一个网站(例如http://example.com)。
为此,我尝试在网站B 上设置一个cookie(通过在网站A 上加载一个页面,设置cookie)。打开网站B 时,我会检查该cookie。
这很好用,但在 Safari 上除外。 Safari 阻止在网站 B 上设置 cookie。查了很多,发现Safari默认会屏蔽第三方cookies。
该问题的另一个解决方案可能是使用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">
【问题讨论】:
标签: javascript php cookies safari cross-domain