Для тестирования посетителю поочередно показывают вопросы, записывая его ответы в базу. Но есть нюанс – надо сделать так, что бы при обновлении страницы или при клику «Назад» скрипт останавливался и выводилось сообщение об ошибке. Я сделал так. На стартовой странице, где еще нет вопросов, вырабатывается случайное число $randomNumber, которое заносится в базу. Потом человек кликает «Начали» и переходит на страницу с адресом test.php?id=" . $randomNumber. На этой странице извлекается число из динамического адреса и из базы, и сравнивают их. Если числа совпадают, то все хорошо. Вырабатывается другое случайное число и в форме создается action обработчика с динамическим адресом, содержащим это число, которое также заносится в базу вместо прежнего. Посетителю показывается вопрос. Когда посетитель кликает «Готово», происходит переход на обработчика, которого посетитель не видит. В обработчике из адреса берется число и из базы, аналогичным образом они сравниваются. Если совпадают, то результат тестирования заносится в базу. Если не совпадают, то выводится сообщение об ошибке. Генерируется новое случайное число, которое тоже заносится в базу, и оно же добавляется в адрес страницы тестирования, где, после проверки, появляется следующий вопрос. Все это работает очень хорошо, успешно детектируя и обновления, и попытки Назад. Но бывают случаи, когда скрипт останавливается с диагностикой ошибки, которой на самом деле нет. То есть, что-то не успевает синхронизироваться. Может, браузер $_GET долго отдает или что-то в этом роде. Как бы это исправить? (Сессии не стал использовать, поскольку вариант с базой позволяет прерваться и потом продолжить с этого же места).