Настройка файлов cookie на сайтах Safari

Имея два веб-сайта: 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 года и позже утверждают, что он больше не работает. Я пробовал эти вещи до сих пор:

  • Оригинальный взлом с 2010 года (оригинал и некоторые варианты).
  • Запросите страницу через элемент post-form с iFrame в качестве цели.
  • Загрузите скрипт, который инициализирует сеанс (устанавливает cookie) через …
    • IMG-тег
    • скрипт-теги
    • AJAX-вызов через jquery

Все без успеха. Я узнал, что даже карты Google и анал-файлы не устанавливают куки в Safari.

Возможно, можно обойти проблему, загрузив страницу по ссылке, которая устанавливает куки-файл и сразу же после этого перенаправляет страницу со встроенным iFrame. Я не тестировал этот метод, хотя потому, что он не удовлетворил бы наши потребности в отношении удобства и эстетики. Будьте осторожны при использовании этого, когда страница с iFrame доступна через глубокую ссылку!