Pull to refresh

Одни куки для двух доменов (костыль)

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

Перекопав интернет, никакого решения для данной проблемы я не нашел. Устанавливать куки на другом домене политика безопасности не позволяет. Идентифицировать нового незарегистрированного пользователя по 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 запроса и записываются в куки. Но сделать данный код более безопасным большого труда не составит.
  • Так же куки несложно подделать. Но если кто-то заморочится по этому поводу, пускай уже посмотрит на второй сайт, заслужил.
  • Хорошо бы это всё сделать методами класса или хотя бы функциями.
  • При сбое, во время перенаправления, возможно некорректная работа или зацикливание.


Если кто-то знаком с лучшими способами справиться с подобными задачами, буду рад услышать их в комментариях. Так же буду рад здравой кода, который был приведён выше.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.