#.htaccess #redirect #session-variables
Вопрос:
Я пытаюсь сохранить HTTP_REFERER в переменной $_SESSION[] и обновлять ее только в том случае, если ссылающаяся страница не соответствует текущей странице. Таким образом, если я перезагрузлю страницу с помощью PHP-скрипта, она не сохранит текущую страницу, на которой я нахожусь в качестве реферера.
Сначала я получаю ССЫЛКУ и сравниваю ее с текущим URL-адресом:
$referer = $_SERVER["HTTP_REFERER"];
preg_match('/^(.*?://)/', $referer, $start);
$url = $start[0].$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
Затем у меня есть заявление IF, в котором говорится, что если они НЕ совпадают, чтобы обновить сеанс:
if($url != $referer){
$_SESSION['referer'] = $_SERVER["HTTP_REFERER"];
}
Затем я проверяю вывод:
echo $_SESSION['referer'];
Проблема в том, что он обновляет сеанс, несмотря ни на что!
Я попытался сделать то же самое с файлами cookie вместо переменной сеанса. С печеньем я вижу, как оно меняется в консоле. Он не будет обновляться, а затем через секунду он обновляется. Почти так, как если бы страница загружалась дважды.
Когда я установлю этот код
setcookie('test', $_SERVER["HTTP_REFERER"]);
Когда я перейду на новую страницу, она правильно отобразит правильную ссылку, а затем через секунду переключится на текущую страницу.
В моей текущей настройке используется .htaccess, поэтому мне не нужно вводить имена файлов страниц. У меня есть все запросы любых вложенных папок, которые идут в /index.php
Так что http://example.com/home или http://example.com/coolpage все ли вернутся к http://example.com/index.php
Затем с помощью PHP я ищу файл с именем, совпадающим с этой подпапкой, а затем «включаю» его в свою index.php файл как своего рода простая система шаблонов.
Являются ли эти перенаправления .htaccess вмешательством в $_SERVER[«HTTP_REFERER»]? Если я просто использую $_SERVER[«HTTP_REFERER»] непосредственно в своем коде, он отлично работает (он не обновляется). Только когда я пытаюсь сохранить его в другую переменную, все идет наперекосяк.
Есть ли лучший способ иметь кнопку «Назад», которая отправляет пользователя туда, откуда он пришел, без учета загрузки нескольких страниц с одним и тем же URI?
Комментарии:
1. Я еще не полностью решил этот вопрос. Однако, похоже, это как-то связано с favicon.ico. Это запрашивается после загрузки страницы, и это мешает HTTP-рефереру.
Ответ №1:
Я нашел обходной путь, который кажется немного странным, но он достигает желаемого эффекта.
Я оборачиваю все это в оператор if, который выполняется только в том случае, если $uri != favicon.ico
if($uri != 'favicon.ico'){
$referer = $_SERVER["HTTP_REFERER"];
preg_match('/^(.*?://)/', $referer, $start);
$url = $start[0].$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
if($url != $referer){
$_SESSION['referer'] = $_SERVER["HTTP_REFERER"];
}
$backButton = $_SESSION['referer'];
}