HTTP Referer не всегда передается - PullRequest
12 голосов
/ 13 апреля 2011

У меня есть приложение, которое записывает посещения пользователей. Ни к одному из этих посещений не обращаются напрямую, 100% этих посещений относятся с другого сайта.

Я передаю $_SERVER['HTTP_REFERER'] в базу данных. Приблизительно 35% зарегистрированных участников проходят рефери, остальные не заполнены.

Есть ли причина для этого?

Ответы [ 6 ]

16 голосов
/ 13 апреля 2011

Существует несколько причин, по которым HTTP_REFERER может быть пустым.

  1. Вы должны понимать, что это переменная окружения, заданная браузером.Это означает, что пользователи могут удалить его или даже изменить его, если они намерены это сделать.
  2. Пользователи, имеющие доступ к ссылке из закладки, истории или путем ввода ссылки вручную, не имеют реферера.
  3. IEТакже известно, что удаление реферера происходит в ситуациях, связанных с использованием JavaScript.Например, window.open, window.location и даже установка target="_blank" в привязках или meta refresh.
  4. При щелчке по встроенной ссылке в приложении чата, документе PDF / Word / Excel, также не будет установлен реферер..
  5. Использование AJAX, file_get_contents, fopen и других аналогичных функций на других языках, вероятно, не установит запрос реферера.
  6. cURL, fsockopen, приложения, имеющие компоненты, подобные браузеру может не установить реферер.

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

9 голосов
/ 13 апреля 2011

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

Согласно этому ответу браузеры не обязательно отправляют реферера при выполнении мета-обновления.

2 голосов
/ 13 апреля 2011

Браузеры иногда будут включать referer в запрос. Но это не обязательно (referer на 100% добровольно). Действительно, referer связаны с различными проблемами конфиденциальности и безопасности (например, если сайт HTTPS ссылается на сайт HTTP, браузер не должен включать ссылающийся сайт как referer). Так что не надейся на это.

1 голос
/ 25 декабря 2014

При связывании одного документа с другим в Internet Explorer 4.0 и более поздних версиях заголовок Referer не будет отправляться, если ссылка идет со страницы HTTPS на страницу, отличную от HTTPS. Заголовок Referer также не будет отправляться, если ссылка не из протокола HTTP (S), такого как file: //, на другую страницу. для получения дополнительной информации перейдите по этой ссылке

0 голосов
/ 26 сентября 2016

Распространено, когда вы застреваете, обнаруживая, почему оно отсутствует: - Иногда ваш реферер использует https, а вы находитесь на http, оно будет потеряно.

В противном случае: - Пользователь получает доступ путем непосредственного ввода URL.- Пользователь сделал закладку и пришел из закладок.- Иногда пользователь сохраняет URL-адрес по умолчанию для браузера (аналогично закладке) - Прокси-серфинг может удалить реферер.- доступ к сайту в качестве ботов (поисковая система)

0 голосов
/ 13 апреля 2011
  1. Прямой доступ к вашей странице (ввод URL в адресной строке или из закладок, истории и т. Д.)
  2. Настройки браузера (отключен реферер или пуст)
  3. если кто-то запрашивает содержимое страницы с помощью функции file_get_contents () ...
...