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