Я работаю над своим сайтом, чтобы позволить пользователям проходить тест, чтобы они могли видеть, насколько они знают конкретный предмет. Однако я столкнулся с небольшой проблемой. Как только пользователь отправляет тест для оценки, как я могу помешать им вернуться на тестовую страницу? Я нахожусь на Mac с запуском Safari, и когда я нажимаю кнопку «Назад» в своем веб-браузере после отправки теста, он оставляет все ответы, на которые я ответил, заполненный. Я хочу, чтобы он сделал это: когда пользователь отправляет тест и нажимает кнопку «Назад» в своем веб-браузере, он перенаправляет их на главную тестовую страницу.
Я использую PHP и MYSQL. У меня даже есть тестовые страницы, так что пользователь должен исходить из определенного URL-адреса (я использую HTTP_REFERER), и я пробовал другие вещи, такие как сеансы, но я не могу понять это. Любая помощь приветствуется.
Вы не останавливаете их.
Вместо этого измените свое приложение так, чтобы оно продолжало работать, даже если оно вернется. Вы можете вставлять уникальный номер в скрытое поле на странице, и если они повторно отправляют один и тот же тест дважды, вы можете обнаружить его и отобразить соответствующее сообщение об ошибке. Вы также должны думать о том, что должно произойти, если они изменяют уникальный номер.
Если вы не хотите, чтобы люди отправляли разные ответы, как только они уже ответили, все, что вам нужно сделать, это проверить в скрипте, который принимает тест для оценки, что пользователь никогда не отправлял тест раньше. Если вы этого не сделаете, умный ученик всегда сможет обойти вашу защиту, отправив соответствующий запрос прямо на этот скрипт.
Если вы не хотите, чтобы люди видели предыдущие ответы (например, если у вас есть два человека для оценки своих тестов на одном компьютере), подумайте об использовании AJAX на тестовой странице, чтобы отправить ответы, а затем удалить их из полей. Таким образом, большинство браузеров не запомнят ответы, а кнопка «Назад» не удалит данные, удаленные JavaScript.
В верхней части страницы сорта введите следующее:
session_start(); $_SESSION['testcomplete'] = 'yes';
Затем в верхней части каждой страницы теста поместите это:
session_start() if ($_SESSION['testcomplete'] == 'yes') { header("Location:cheater.php"); }
Вы можете запустить javascript, который очищает все ответы. Вы также можете просто разрешить одно представление, чтобы последующие материалы не обрабатывались. HTTP_REFERER обычно отправляется, но может быть подделан и подделан измененным браузером.
Вы могли бы имитировать отсутствие страницы, чтобы вернуться. С одной страницы, сгенерируйте каждую тестовую страницу с помощью jQuery и не давайте вернуться, только вперед. Кнопка «Назад» перенесет их на страницу, прежде чем они приступят к тестированию, и вы можете позволить им снова запустить тест и создать нужную часть, где они должны быть. Это было бы довольно легко, если бы вы не зашли слишком далеко в развитие по-настоящему.
http://www.htmlgoodies.com/tutorials/buttons/article.php/3478911/Disabling-the-Back-Button.htm вы должны иметь возможность сделать это в javascript.
В верхней части сценария POST-ing ответы, проверьте, есть ли у вас результаты теста в базе данных для текущего пользователя для этого теста. Если вы это сделаете, перенаправляйте результаты.
if(get_test_results($user)){ $test_url = get_test_url($user); header( "Location: $test_url" ) ; }
Отключение кнопки «Назад» – это не очень хорошая идея.
Я столкнулся с аналогичной проблемой, сделав онлайн-экзамен самостоятельно
что я сделал
Я предоставил переменную сеанса, так что если пользователь вставляет URL предыдущей страницы в адресную строку, тогда при загрузке страницы страница автоматически пересылается на следующую желаемую страницу. Была ли указана страница, URL которой был указан, то, что она посещается в первый раз или ее пересматривает, определяется значением переменной сеанса
Если пользователь вместо загрузки страницы возвращается с помощью кнопки браузера, он автоматически перенаправляется на следующую страницу в истории, как:
JavaScript: window.history.forward (1);
Надеюсь это поможет 🙂