Определить И.П. Адрес ссылающегося сайта - PullRequest
2 голосов
/ 03 июня 2011

В настоящее время я работаю над модулем маркетинга, который отслеживает сайты, которые приносят трафик на наш сайт. Есть ли способ получить домен или И.П. адрес ссылающегося сайта с использованием PHP? Я считаю, что HTTP_REFERER не всегда отображается в глобальном $ _SERVER.

Спасибо заранее.

Ответы [ 5 ]

9 голосов
/ 03 июня 2011

Заголовок HTTP_REFERER должен быть отправлен браузером клиента.Вы не можете полагаться на то, что оно будет отправлено.

Сценарии, когда он не отправляется, включают:

  • Пользователь вводит адрес вручную
  • Пользователь открывает ссылку в одном из больших электронных писемклиенты, которые делают большие шаги, чтобы скрыть REFERER
  • Браузер пользователя настроен на блокировку заголовка реферера (редко)
  • Пользователь переключает протоколы (т.е. ссылкуна http-сайте, указывающем на https, или наоборот)

В этих случаях вы ничего не можете сделать.

Однако, если вы контролируете сайт связывания, вы может добавить идентификатор ссылки в параметре GET к ссылке:

http://example.com/?from=mysite

затем вы можете проанализировать параметр from в своем скрипте.

Преобразование строки ссылающейсядля IP обычно не очень хорошая идея, так как на многих IP-адресах размещаются десятки или сотни сайтов.Различие сайта , с которого пришел пользователь, будет потеряно таким образом.

4 голосов
/ 03 июня 2011

Ссылочный адрес присутствует в заголовке запроса от всех сотрудничающих браузеров, для которых есть реферер.Если пользователь только что ввел ваш URL, то реферера нет.

Программирование URL-адреса в IP-адрес является тривиальным вопросом:

<?php
$raddr = gethostbyaddr($_SERVER['HTTP_REFERER']);

?>
2 голосов
/ 03 июня 2011

Если он не отображается в $ _SERVER, это обычно означает, что клиент не отправляет его.Реферер - это данные, которым нельзя доверять за точность, поскольку они полностью зависят от пользователя (точнее, от его браузера).

Лучше всего проверить, присутствует ли реферер, а затем использовать функцию gethostbyname () в домене, чтобы получить нужный IP-адрес.

http://php.net/manual/en/function.gethostbyname.php

2 голосов
/ 03 июня 2011

Если HTTP_REFERER не отображается на сервере, то этот пользователь не зашел на ваш сайт по ссылке или у него есть способ маскировать эту переменную через браузер.Не так много, что вы можете сделать.

1 голос
/ 03 июня 2011

Вы можете определить URL рефферирования с помощью $_SERVER['HTTP_REFERER'], но имейте в виду, что этим можно манипулировать.

Затем вы можете использовать gethostbyname($referrer) для получения IP-адреса.

См .: http://php.net/manual/en/reserved.variables.server.php и http://php.net/manual/en/function.gethostbyname.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...