Имея два веб-сайта: A
и B
Я хочу, чтобы пользователи, открывшие веб-сайт B
перенаправлялись на другой веб-сайт (например, http://example.com
), если они не посетили веб-сайт A
Для этого я попытался установить файл cookie на веб-сайте B
(просто загрузив страницу на веб-сайт A
, установив файл cookie). При открытии веб-сайта B
я проверяю этот файл cookie.
Это работает хорошо, за исключением Safari. Safari блокирует настройку файла cookie на веб-сайте B
Я много искал и выяснил, что 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">
Это кажется невозможным для достижения. Safari принимает только файлы cookie с страниц, на которые пользователь перешел к нему.
В 2010 году было довольно хакерское решение ( источник ), но комментарии 2013 года и позже утверждают, что он больше не работает. Я пробовал эти вещи до сих пор:
Все без успеха. Я узнал, что даже карты Google и анал-файлы не устанавливают куки в Safari.
Возможно, можно обойти проблему, загрузив страницу по ссылке, которая устанавливает куки-файл и сразу же после этого перенаправляет страницу со встроенным iFrame. Я не тестировал этот метод, хотя потому, что он не удовлетворил бы наши потребности в отношении удобства и эстетики. Будьте осторожны при использовании этого, когда страница с iFrame доступна через глубокую ссылку!