Предыстория: Есть два сайта с общей базой. При заходе пользователя на любой из них, необходимо запоминать какой это именно сайт и при следующем обращении к одному из этих сайтов, перенаправлять именно на тот, который пользователь посетил первым.

Перекопав интернет, никакого решения для данной проблемы я не нашел. Устанавливать куки на другом домене политика безопасности не позволяет. Идентифицировать нового незарегистрированного пользователя по ip не вариант, т.к. на одном ip может находится несколько клиентов, да и ip постоянно меняется.

Ничего другого, как незаметно отправлять пользователя на второй домен, устанавливать куки и отправлять обратно, в голову не пришло. В итоге получился такой код:


    if (!isset($_COOKIE["drd"])) {
        if (isset($_GET['drd'])) {
            setcookie("drd", $_GET['drd'], time() + 2592000, "/");
            header('Location: http://site2.ru/');
            exit;
        }
        setcookie("drd", "site1.ru", time() + 2592000, "/");
        header('Location: http://site2.ru/?drd=site1.ru');
        exit;
    } else {
        $drd = $_COOKIE["drd"];
        if ($drd != "site1.ru") {
            header('Location: http://site2.ru/');
        }
    } 


На втором домене размещаем аналогичный код, только заменяем site1 на site2 и обратно. Вуаля, у пользователя всегда открывается сайт, к которому он обратился первым.

Хорошо бы иметь какой-то способ сбрасывать куки для того, чтобы разработчики и администраторы могли легко перемещаться между сайтами. Получилась такая конструкция:

    if (isset($_GET['reset'])) {
    if ($_GET['reset'] == 1) {
        setcookie("drd", "", -1, "/");
        header('Location: http://site2.ru/?reset=2');
        exit;
    }else{
        setcookie("drd", "", -1, "/");
        header('Location: http://site2.ru/');
        exit;
    }
} else {

    if (!isset($_COOKIE["drd"])) {
        if (isset($_GET['drd'])) {
            setcookie("drd", $_GET['drd'], time() + 2592000, "/");
            header('Location: http://site2.ru/');
            exit;
        }
        setcookie("drd", "site1.ru", time() + 2592000, "/");
        header('Location: http://site2.ru/?drd=site1.ru');
        exit;
    } else {
        $drd = $_COOKIE["drd"];
        if ($drd != "site1.ru") {
            header('Location: http://site2.ru/');
        }
    } 
}


А теперь недостатки:
  • Параметры берутся напрямую из GET запроса и записываются в куки. Но сделать данный код более безопасным большого труда не составит.
  • Так же куки несложно подделать. Но если кто-то заморочится по этому поводу, пускай уже посмотрит на второй сайт, заслужил.
  • Хорошо бы это всё сделать методами класса или хотя бы функциями.
  • При сбое, во время перенаправления, возможно некорректная работа или зацикливание.


Если кто-то знаком с лучшими способами справиться с подобными задачами, буду рад услышать их в комментариях. Так же буду рад здравой кода, который был приведён выше.