иметь дело с нежелательным поведением при нажатии кнопки "Назад" на моем сайте - PullRequest
0 голосов
/ 19 февраля 2011

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

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

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

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

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

Майкл

Ответы [ 3 ]

4 голосов
/ 19 февраля 2011

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

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

HTML
От:

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

Кому:

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

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

1 голос
/ 19 февраля 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>

0 голосов
/ 19 февраля 2011

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

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

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

...