HTTP Referer не всегда передается

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

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

Для этого есть причина?

Solutions Collecting From Web of "HTTP Referer не всегда передается"

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

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

Существует несколько причин, по которым 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, приложения, которые имеют компоненты, похожие на браузер, могут не устанавливать референт.

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

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

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

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

Обычно, когда вы застряли в поиске, почему этого не хватает: – Когда-то ваш референт https и вы на http, он будет потерян.

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