Я планирую создать онлайн-экзамен sytem в PHP. Какие шаги я могу предпринять для восстановления старой сессии, если пользователь случайно закрыл окно?
Предположим, что он уже ответил на 49 вопросов из 50 и внезапно отключился питание (и нет ИБП), или он случайно закрывает окно (даже по ошибке, если он нажимает «да» на подсказке javascript на событие window.unload), а затем снова открывает браузер, все потеряно. Что я мог сделать, чтобы предотвратить это?
Заранее спасибо 🙂
Предложите систему входа в систему, в которой вы сохраняете прогресс, связанный с входом пользователя, или просто используйте файлы cookie, срок действия которых не истекает при закрытии браузера (т.е. установите дату истечения срока действия в будущем).
Вам нужно будет сделать одну из двух вещей:
Удерживайте текущее состояние на пользовательском компьютере – это должно быть сделано через файл cookie.
Перенесите текущее состояние на сервере.
Второй вариант, вероятно, более надежный, он требует постоянного контакта с сервером. Это также позволит сеансу возобновить работу на другом компьютере.
Первый вариант, вероятно, будет проще реализовать.
Вы можете сохранить параметры сеанса в cookie, срок действия которых истекает через 30 дней, например
Вы можете сохранять свое состояние каждый раз, когда они переходят к следующему вопросу – если он сохранен в сеансе, вы можете сериализовать сеанс и сохранить его в БД, связанную с их учетной записью.
Если они снова откроют браузер, вы можете загрузить сохраненный сеанс, неэтериализовать его и продолжить, когда он его покинет.
Хранение идентификатора сеанса как файла cookie с длительным временем истечения срока действия решит проблему, но представит новую проблему: на общедоступных или общих компьютерах пользователям придется явно выйти из системы (т. Е. Уничтожить сеанс), в противном случае все, кто обратится к сайту после того, как они quit продолжит свою сессию.
Другим решением является привязка «сеансов экзамена» к пользователю, сохранение их в базе данных и продолжение сеанса, если пользователь с ожидающим экзаменом регистрируется. Очевидно, для этого требуется немного кодирования 🙂
Конечно, если есть перебои в подаче электроэнергии, cookie, возможно, еще не был сброшен на диск, но в противном случае (особенно если у вас есть несколько вопросов на одной странице), пользователь потеряет меньше состояния, чем если бы вы сохранили только на submit.