DomenForum.net

DomenForum.net (https://domenforum.net/index.php)
-   Программирование (https://domenforum.net/forumdisplay.php?f=26)
-   -   Как определить HTTP_REFERER? (https://domenforum.net/showthread.php?t=227595)

cx717 27.05.2021 00:16

Как определить HTTP_REFERER?
 
День добрый всем.
Может кто подскажет в каком направлении копать - буду признателен.
В корне сайта создана страница domain.ru/link.php с элементарным кодом:
Код:

<?php
 echo '<a href="domain.ru/script.php">Push Me</a>';

Так же в корне есть страница domain.ru/script.php с элементарным кодом:
Код:

<?php
 echo 'http_referer = ' . $_SERVER['HTTP_REFERER'];

Так вот $_SERVER['HTTP_REFERER'] не определяется, хотя мы попадаем на страницу
domain.ru/script.php со страницы domain.ru/link.php и HTTP_REFERER должен
определиться как domain.ru.
Вопрос:
- возможно ли, что в настройках сервера намеренно обнуляется $_SERVER['HTTP_REFERER'] ?
- сайт на битриксе - могут ли его настройки ( битрикса ) обнулять $_SERVER['HTTP_REFERER'] при том, что файлы лежат в корне и по идее не затрагиваются битриксом?
- может ли .htaccess ( который лежит в корне сайта ) обнулять $_SERVER['HTTP_REFERER'] ?

UFO 27.05.2021 00:39

Из официальной справки PHP:

Цитата:

'HTTP_REFERER'
Адрес страницы (если есть), с которой браузер пользователя перешёл на эту страницу. Этот заголовок устанавливается браузером пользователя. Не все браузеры устанавливают его, а некоторые в качестве дополнительной возможности позволяют изменять содержимое заголовка HTTP_REFERER. Одним словом, нельзя доверять этому заголовку.
Пробуйте разные браузеры. А вообще переменная весьма скользкая. Для чего нужно ее получить? Что пользователь ходит в пределах сайта? Так может это через сессии как-то установить, или при помощи GET-запроса?

cx717 27.05.2021 01:48

Задача понять перешел ли клиент с другого ресурса или зашел напрямую на сайт. На сайте много страниц и к каждой ссылке get запросы прописывать не вариант я думаю.
Тот же скрипт на другом хостинге без битрикса в том же браузере срабатывает нормально. Поэтому думаю проблема либо в настройках сервера либо в битриксе.
Нашел, что в Laravel http_referer как раз из $_SERVER убирается и доступен из ларавелевской переменной. Может что то такое и с битриксом - я просто в нем не особо, мягко говоря, разбираюсь.

miketomlin 27.05.2021 12:24

HTTP_REFERER – это скорее для статистики, чем для функционала. Для функционала размещайте спец. ссылки: https://gency.ru/comment/50

добавлено через 11 минут
Чтобы не создавать вручную для каждой своей страницы спец. адрес, можно использовать такие адреса:
/идентификатор-источника/адрес-своей-страницы
(Идентифицировать можно как конкретные внешние страницы, так и целиком сайты, если вам не нужно различать конкретные страницы, с которых идут переходы.)

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

pegs 31.05.2021 23:40

1) Может быть "проблема" в конфигурации сервера или в программном коде движка
2) Может быть браузер сконфигурирован не передавать это поле.

Повесьте очень полезную команду
PHP код:

<?php

phpinfo
();

и внимательно изучите её вывод.


Текущее время: 17:55. Часовой пояс GMT +4.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Техническая поддержка — DevArt.PRO. Перевод: zCarot.