HTTP_REFERRER и перенаправление расположения - PullRequest
2 голосов
/ 31 августа 2011

Я долго искал здесь и не могу найти ответ на свой конкретный вопрос.

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

header("Location: /error.php");

Я хочу перехватить и зарегистрировать http_referrer на странице error.php, но по какой-то причине он не установлен.Я видел объяснения, почему он не установлен с Meta-refresh, но заголовок местоположения - 302, так что он должен быть установлен правильно?Есть мысли?

Обратите внимание: я знаю, что http_referrer ненадежен, и я знаю, что могу передавать информацию отдельно.Ничего из этого не имеет значения в моем сценарии (если я не хочу изменить все места, где вызывается перенаправление).

Ответы [ 3 ]

3 голосов
/ 31 августа 2011

Хорошо, HTTP_REFERER устанавливается браузером, и если браузер решит не устанавливать его на перенаправление 302, а это не так, вы его не получите. 302 - это временное перенаправление, что означает, что предыдущая страница временно недоступна. Почему браузер хочет отправлять информацию для страницы, которой сейчас нет?

Хорошие способы достичь этого:

  • Лично у меня есть класс Errors, который обрабатывает такие вещи, а не просто перенаправляет их прямо со страницы. Это позволяет вам записывать всю необходимую вам информацию, даже отладочную, еще до того, как произойдет перенаправление.
  • Установите сеанс, включающий информацию о странице, и сохраните эту информацию на странице ошибок для записи.
  • Вы можете попытаться установить строку Referer, используя заголовок, но некоторые браузеры игнорируют это и не будут отправлять его в любом случае.

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

2 голосов
/ 31 августа 2011

Это на самом деле HTTP_REFERER (с одним 'R' в середине) - это орфографическая ошибка, которая застряла!

echo $_SERVER['HTTP_REFERER'];
0 голосов
/ 06 февраля 2013

Некоторые браузеры не поддерживают HTTP_REFERER. Вы можете использовать функцию isset(), и это очень важно, чтобы вы использовали HTTP_REFERER, а не HTTP_REFERRER!

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