Задать вопрос

Как сохранять ответы во время прохождения тестирования?

Привет всем! Пишу систему тестирования и столкнулся с проблемой. Мне нужно сделать ограничение по времени, после истечения которого тест будет считаться не пройденным, либо необходимо пройти его еще раз. Не могу понять как мне это реализовать.

После выбора ответа и нажатия кнопки "ответить" выбранный ответ сразу же заносится в бд. Получается нужно как-то очистить записанные значения, после истечения срока, но как это делать не совсем понятно. Конечно можно попробовать записывать ответы в куки.

Какие есть еще варианты?
  • Вопрос задан
  • 867 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Denormalization
@Denormalization
Можно попробовать что-то вроде:

quiz_sessions
--------------------
id | user_id | finished(bool) | created_at | finished_at


Где:
user_id: ID юзера который проходит тест
finished: закончил ли юзер прохождение
created_at: время создания сессии (начала тестирования)
finished_at: время завершения


Теперь, когда юзер начинает тест, создаем в БД новую запись quiz_sessions.
Если в БД уже есть НЕ законченная сессия, можно предложить юзеру продолжить прошлый тест с момента где он остановился.
Когда юзер заканчивает, обновляем запись в БД, и выставляем finished & finished_at.

Далее можно сделать скрикпт который по крону будет пробегаться по quiz_sessions и удалять записи у которых created_at > какого-то значения + можно удалять все ответы у юзера.

UPD:
В чем приемущество такого подхода:
Если мы не удаляем сессии которые не законченны, то мы можем делать выборку, и видеть сколько человек и кто конкретно начинал делать тест и не закончил. Мы можем отослать им уведомление или наказать.

Можно делать выборку и показывать статистику топого времени прохождения теста + среднее время + минимальное.
Можно ловить "читеров", если такие будут, которые будут проходить тест за 1 секунду.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Если закрытие окна предполагает исчезновение ранее данных ответов автоматически, то sessionStorage.
Если не предполагает, то localStorage.

Есть также вариант с indexedDB, но ситуация с поддержкой неоднородна и придётся иметь дело с полифиллами (использующими Web SQL).
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы