получение HTTP_REFERER на целевой странице — возвращает URL-адрес целевой страницы

У меня есть целевая страница с формой. форма имеет действие формы для файла php. Я отправляю все поля, заполненные клиентом, в API, например:

$input_email = isset($_POST['email']) ? check_plain($_POST['email']) : 'None';
$input_name = isset($_POST['name']) ? check_plain($_POST['name']) : 'None';
$input_website = isset($_POST['website']) ? check_plain($_POST['website']) : 'None';
$input_website = strtolower($input_website);
$input_content = isset($_POST['content']) ? check_plain($_POST['content']) : 'None';
$previous = $_SERVER['HTTP_REFERER'];

Как вы можете видеть в последней строке, я получаю HTTP_REFERER со страницы. Но при этом возвращается URL-адрес целевой страницы, а не реферальный URL-адрес целевой страницы. (например: если моя целевая страница — example.com, а клиент попал туда с google.com, я хочу, чтобы $previous имел google.com, но вместо этого у меня есть example.com)

Есть ли способ заставить его работать? Также обратите внимание, что я знаю о проблемах с использованием HTTP_REFERER.


person Noam Gur    schedule 24.05.2016    source источник
comment
вы можете добавить скрытое поле и назначить ему массив сеансов (вместо того, чтобы полагаться на HTTP_REFERER), установить текущую страницу/url   -  person Funk Forty Niner    schedule 24.05.2016
comment
Я знаю это. в любом случае, см. ответ ниже. это именно то, что я имел в виду, используя HTTP_REFERER, на который я бы не стал полагаться. Я знаю, вы сказали, что знаете об этом, но вам действительно не следует его использовать. Редактировать: вы удалили свой комментарий сейчас.   -  person Funk Forty Niner    schedule 24.05.2016


Ответы (1)


Итак, что здесь происходит, так это то, что ваша начальная загрузка страницы имеет (предполагаемый) правильный http-реферер, но как только пользователь публикует форму, реферер становится вашим собственным доменом.

В форме на целевой странице вы можете сделать что-то в этом роде.

<?php if (isset($_SERVER['HTTP_REFERER'])): ?>
<input type="hidden" name="http_referer" value="<?= $_SERVER['HTTP_REFERER']; ?>" />
<?php endif; ?>

Затем, когда вы выполняете постобработку, вы можете проверить наличие

$_POST['http_referer']

и действовать соответственно

person Dale    schedule 24.05.2016