Как восстановить старый сеанс, когда пользователь случайно закрывает браузер?

Я планирую создать онлайн-экзамен sytem в PHP. Какие шаги я могу предпринять для восстановления старой сессии, если пользователь случайно закрыл окно?

Предположим, что он уже ответил на 49 вопросов из 50 и внезапно отключился питание (и нет ИБП), или он случайно закрывает окно (даже по ошибке, если он нажимает «да» на подсказке javascript на событие window.unload), а затем снова открывает браузер, все потеряно. Что я мог сделать, чтобы предотвратить это?

Заранее спасибо 🙂

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

Вам нужно будет сделать одну из двух вещей:

  1. Удерживайте текущее состояние на пользовательском компьютере – это должно быть сделано через файл cookie.

  2. Перенесите текущее состояние на сервере.

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

Первый вариант, вероятно, будет проще реализовать.

Вы можете сохранить параметры сеанса в cookie, срок действия которых истекает через 30 дней, например

Вы можете сохранять свое состояние каждый раз, когда они переходят к следующему вопросу – если он сохранен в сеансе, вы можете сериализовать сеанс и сохранить его в БД, связанную с их учетной записью.

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

Хранение идентификатора сеанса как файла cookie с длительным временем истечения срока действия решит проблему, но представит новую проблему: на общедоступных или общих компьютерах пользователям придется явно выйти из системы (т. Е. Уничтожить сеанс), в противном случае все, кто обратится к сайту после того, как они quit продолжит свою сессию.

Другим решением является привязка «сеансов экзамена» к пользователю, сохранение их в базе данных и продолжение сеанса, если пользователь с ожидающим экзаменом регистрируется. Очевидно, для этого требуется немного кодирования 🙂

  • непрерывно сохранять состояние страницы в файл cookie (например, при каждом изменении формы – при этом у вас есть состояние текущей страницы);
  • на отправке, сохраните состояние в сеанс (или даже в базу данных незавершенных форм) и очистите его от cookie (таким образом, у вас есть общее состояние экзамена, хранящегося на стороне сервера, поэтому вы можете удалить его из файла cookie).
  • По завершении очистите оба файла cookie и сеанс.

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