HTTP_REFERER

KK
На сайте с 25.07.2006
Offline
138
2084

Подскажите как записать именно внешний источник перехода?

Если при регистрации прописываю просто

$data['referer'] = getenv("HTTP_REFERER");

то учитываются также переходы с самого сайта. а на страницу регистрации ведь переходят чаще всего только с внутренних страниц.. или только через кукисы такое можно осуществить?

Что-то типа в index.php прописать

if(empty($_COOKIE['referer'])) setcookie ("referer", $_SERVER['HTTP_REFERER'],time()+(5*24*60*60), "/");

И затем на странице регистрации

if (!empty($_COOKIE['referer'])) $data['u_referer'] = $_COOKIE['referer'];

LEOnidUKG
На сайте с 25.11.2006
Online
1723
#1

if (!preg_match('@'.$_SERVER["HTTP_HOST"].'@smi',$_SERVER["HTTP_REFERER"]))

{

$data['referer'] = $_SERVER["HTTP_REFERER"];

}

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
KK
На сайте с 25.07.2006
Offline
138
#2

В данном случае я так понимаю referer записывается только если переход был произведен с внешнего источника именно на страницу регистрации?

Мне нужна не только страница регистрации, а вообще переход на сам сайт. Всеравно на какую страницу. Нужно знать именно откуда перешли на сам сайт - и это записать в базу данных при регистрации.

LEOnidUKG
На сайте с 25.11.2006
Online
1723
#3
В данном случае я так понимаю referer

Значит вы вообще ничего не понимаете в коде, да? При чём тут страница регистрации?

KK
На сайте с 25.07.2006
Offline
138
#4

LEOnidUKG, переменная $data['referer'] у меня указывается только на странице регистрации. А Вы предлагаете просто проверку значения $_SERVER["HTTP_REFERER"]

Совпадает или нет с $_SERVER["HTTP_HOST"]

Или я неправ? preg_match действительно плохо знаю. Но даже я знаю, что это просто проверка.

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#5
Kel_Kimpbell:
Или я неправ? preg_match действительно плохо знаю. Но даже я знаю, что это просто проверка.

Не, этот код надо читать так - если в переменной реферер не содержится фрагмент совпадающий с названием хоста сайта, тогда записываем в $data['referer'] реферер, если фрагмент не найден, то $data['referer'] останется пустой.LEOnidUKG, в вашем примере внешние ссылки вроде refer.ru/?r=site.ru записываться не будут.

Тогда надо использовать parse_url()

$refs=parse_url($_SERVER["HTTP_REFERER"]);

if ($refs["host"]!=$_SERVER["HTTP_HOST"]) //если хосты не совпадают

{

$data['referer'] = $_SERVER["HTTP_REFERER"];

//запись в базу

}

KK
На сайте с 25.07.2006
Offline
138
#6

Ёхан Палыч, дело в другом. Если так реализовывать - то у меня везде будут пустые $data['referer'], т.к. переменная у меня записывается только на странице регистрации, а на нее люди всегда заходят с внутренних страниц сайта. Никто не заходит на страницу регистрации напрямую с других сайтов (ну может несколько человек из тысячи - ито скорей боты).

Мне же нужно узнать откуда человек нашел наш сайт. Самый первый HTTP_REFERER.

Я так понял только через кукисы такое проще всего сделать.. Как я и писал в начале

в index.php прописать

if(empty($_COOKIE['referer'])) setcookie ("referer", $_SERVER['HTTP_REFERER'],time()+(5*24*60*60), "/");

И затем на странице регистрации

if (!empty($_COOKIE['referer'])) $data['u_referer'] = $_COOKIE['referer'];

В таком случае как только человек зайдет на сайт - сразу пропишется HTTP_REFERER в кукисах. И дальше уже меняться кукисы не будут.

Просто думал можно без кукисов обойтись..поэтому и спросил.

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#7

Kel_Kimpbell, то есть надо запомнить откуда пришел и использовать только на странице регистрации? А если регистрации не будет то и писать не надо? Тогда вы правильно поняли - куки.

Kel_Kimpbell:
Просто думал можно без кукисов обойтись..поэтому и спросил.

Ну или сессии.

KK
На сайте с 25.07.2006
Offline
138
#8

Ёхан Палыч, да, именно так. Использовать только если человек регистрируется.

Уже сделал через кукисы. Все работает. Спасибо :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий