бороться с нежелательным поведением при нажатии кнопки "Назад" на моем веб-сайте

Я искал ответ на эту проблему и постепенно принимаю тот факт, что, вероятно, я поступил неправильно, но вот просьба о чудесной жемчужине мудрости, которая могла бы помочь!

Я работаю над веб-сайтом, на котором слева есть панель навигации в стиле каталога. Таким образом, сначала пользователь увидит только два каталога (Грамматика / словарь - это сайт для изучения английского языка), и, щелкнув по каталогу, он «откроется», чтобы показать его содержимое (другие страницы или каталоги).

То, как я работаю, заключается в том, что каждый каталог представляет собой кнопку отправки формы, которая перезагружает страницу при нажатии, но со значением в $ _POST, которое сообщает сайту открыть или закрыть папку (это делается в массиве в $ _SESSION) . Отлично работает! Проблема, однако, в том, что если пользователь нажимает кнопку «Назад» в своем браузере, он получает запрос с вопросом, хотят ли они повторно отправить данные, чего я не хочу.

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

Я знаю, что реальное решение этой проблемы, вероятно, состоит в том, чтобы просто переосмыслить боковую панель, и любые советы о том, как это сделать лучше, также будут очень признательны!

Майкл


person Michael Beeson    schedule 19.02.2011    source источник
comment
многие браузеры фактически загружают последнюю страницу из кеша при нажатии кнопки «Назад», так что на самом деле php ничего не может с этим поделать.   -  person amccausl    schedule 19.02.2011


Ответы (3)


Причина, по которой вы получаете приглашение, заключается в том, что POST должен использоваться, если отправляемые данные собираются что-то изменить, поэтому отправка запроса POST с помощью кнопки возврата может иметь неожиданное поведение (например, дублирование данных).

Замена POST на GET должна отключить запрос.

HTML
От:

<form action="page.php" method="post">
</form>

To:

<form action="page.php" method="get">
</form>

PHP
Измените ссылки с $_POST[''] на $_GET['']

person chustar    schedule 19.02.2011
comment
Да, это показалось мне правильным. Я его конвертирую, чтобы достать и посмотреть, как дела идут! Спасибо за быстрый ответ! И всем остальным - person Michael Beeson; 19.02.2011

<?php
        session_start();        
        if( $_GET['t'] == $_SESSION['token'] ||  $_SESSION['directory'] == $_GET['q'] || !isset($_GET['q']) ) { 
          echo "<h1><span>you going</span> forward</h1>";
        } else {
          echo "<h1><span>you going</span> backward</h1>";
          echo "<p>should be <strong>{$_SESSION['directory']}</strong> directory</p>";
        }        
           $token = uniqid();  
           $_SESSION['token'] = $token;
           $_SESSION['directory'] = $_GET['q'];  
?>

<a href="index.php?q=grammar&t=<? echo $token; ?>">grammar</a>
<a href="index.php?q=vocabulary&t=<? echo $token; ?>">vocabulary</a>

person Luca Filosofi    schedule 19.02.2011
comment
Ух ты, много работы ты проделал, да и ясно. мой окончательный результат был более-менее таким же, но жаль, что я этого не увидел - person Michael Beeson; 23.08.2011

Как правило, в веб-разработке вы должны делать публикацию только тогда, когда вы отправляете данные, которые вы не хотите отправлять повторно или которые вы не хотите отображать в ваших журналах на сервере. И как только вы сделаете сообщение, вы должны перенаправить его, используя параметры get или какой-либо другой метод.

Если вы используете параметры получения вместо публикации, вы можете просто сделать навигацию по странице без сохранения состояния и просто получить запрашиваемую страницу.

Существуют методы определения того, была ли нажата кнопка «Назад», но их сложно заставить работать постоянно, и они могут расстраивать пользователя, поэтому рекомендуется сделать это по-другому.

person regality    schedule 19.02.2011