$_SERVER['HTTP_REFERER'] не работает

zek24

Мой дом здесь!
Команда форума
Модератор
Регистрация
14 Ноя 2009
Сообщения
811
Реакции
310
  • Автор темы
  • Модер.
  • #1
Привет,
столкнулся с непонятной ситуацией в простейшем коде:
после нажатия на ссылку попадаем
PHP:
<a href="success.php" id="test">Link</a>
<?php
if(isset($_SERVER['HTTP_REFERER'])) {
  echo $_SERVER['HTTP_REFERER'];
}
?>
на success.php, а через сек. возвращаемя на стартовую
PHP:
header("Refresh: 1; URL={$_SERVER['HTTP_REFERER']}");
echo "success";
Но на стартовой нет отображения значения $_SERVER['HTTP_REFERER']
Почему?
 
Последнее редактирование:
Это от браузера зависит, многие браузеры не отправляют данный заголовок при использовании header( 'Location: /'); или header( 'Refresh: 0; url=/' );, вообще по стандарту данный заголовок отправляется только при переходе по ссылке пользователем.
 
Привет,
столкнулся с непонятной ситуацией в простейшем коде:
после нажатия на ссылку попадаем
PHP:
<a href="success.php" id="test">Link</a>
<?php
if(isset($_SERVER['HTTP_REFERER'])) {
  echo $_SERVER['HTTP_REFERER'];
}
?>
на success.php, а через сек. возвращаемя на стартовую
PHP:
header("Refresh: 1; URL={$_SERVER['HTTP_REFERER']}");
echo "success";
Но на стартовой нет отображения значения $_SERVER['HTTP_REFERER']
Почему?
Видимо потому что заголовок Referer не установлен. Хотя даже если его установить вот так в пхп
Код:
header("Referer: http://test.ru");
- все равно echo не выведет его. Хотя в файербаге видно.
думаю вот так будет работать(будет виден реферер)
Код:
<script>
window.location.replace(<?php echo chr(39).$_SERVER['HTTP_REFERER'].chr(39); ?>);
</script>
 
Видимо потому что заголовок Referer не установлен. Хотя даже если его установить вот так в пхп
Код:
header("Referer: http://test.ru");
- все равно echo не выведет его. Хотя в файербаге видно.
думаю вот так будет работать(будет виден реферер)
Код:
<script>
window.location.replace(<?php echo chr(39).$_SERVER['HTTP_REFERER'].chr(39); ?>);
</script>
Заголовки от сервера и заголовки от браузера это разные вещи.
 
isset это хорошо, но он не означает, что в переменной что-то есть. Код ниже вернёт true:
PHP:
$_SERVER['HTTP_REFERER'] = '';
var_dump(   isset($_SERVER['HTTP_REFERER']));

$_SERVER['HTTP_REFERER'] = false; # и даже так :)
var_dump(   isset($_SERVER['HTTP_REFERER']));

По хорошему REFERER это не менее 7 символов на протокол (Для просмотра ссылки Войди или Зарегистрируйся) или 6 для (Для просмотра ссылки Войди или Зарегистрируйся) и еще хотя бы 4 символа на домен (i.ua) в итоге мы проверку делаем:
PHP:
if(isset($_SERVER['HTTP_REFERER']) && strlen($_SERVER['HTTP_REFERER']) > 10) { //либо mb_strlen
 
Назад
Сверху