Попытка создать кнопку «Назад» с помощью HTTP-реферера и PHP, которая работает даже после самостоятельной перезагрузки страницы

#.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'];  
}