Защищенный ТАЙМЕР для ограничения прохождения викторины по времени?
кто подскажет совет реализации (бизнес логики) по поводу защищенного таймера
ДЛЯ ЧЕГО ТАЙМЕР: что-то вроде опроса. Дается определенное время, по истечению которого принудительно заканчивается опрос с теми вариантами, которые юзер успел указать).
Пару нюансов: 1) Надо чтобы при заходе с других устройств , оставшееся время было одинаковым (пример: дается 3 часа, клиент на пк сразу ливает и через 2 часа заходит с телефона и показывает что остался час). 2) Защита от изменений локальной даты (на устройстве у самого клиента). 3) мб еще что-то, до чего я еще не додумался .
может кто-то встречался с чем-то похожим, буду благодарен помощи!
Дополнение: мой вопрос про ЗАЩИЩЕННЫЙ ОТ ПОДДЕЛОК ТАЙМЕР. Чтобы он не зависел от локальной даты клиента (так как она изменяема) .
Элементарно же, когда пользователь начинает опрос, сохранять в БД запись, содержащую идентификатор опроса, идентификатор пользователя и время начала опроса.
Я не очень правильно составил вопрос, но я имел ввиду как на клиенте сделать защищенную проверку таймера. Если иметь дату старта и сверять разницу между текущей датой клиента то клиент может спокойно локальную дату изменять.
Антон Шаманов , Что проверять и когда? XD. Чтобы проверить дату надо отправить запрос клиенту на сервер. Мне нужен совет от человека который разбирается в этом хорошо а не мне рассказывать на мой же вопрос что в этом не так.
jastioknow, на клиенте Вы защищённое не сделаете в принципе. Всё, что пришло на клиент, доступно для модификации. На худой конец, можно делать подмену оригинального скрипта на патченный, в Хроме это из коробки.
вы сами же на свой вопрос и отвечаете - на клиенте НИКАК. Вам правильно ответили: как только клиент начал отвечать - посылаете на сервер сигнал, сервер запоминает дату начала. После завершения ответов - посылаете опять сигнал: тайминг будет высчитывать сервер, и ему пофиг как клиент извращался со своим временем, он посчитает разницу между окончанием и началом по серверному времени.
Проверять время поступления событий с фронта на бэкенд. Прилетел с клиента на сервер ответ на вопрос, сверяем время, если кончилось, то возвращаем клиенту ответ, что время на прохождение викторины исчерпано. Если хотите отображать исчерпание лимита в реальном времени, откройте между клиентом и сервером webscoket или sse и присылайте соответствующие сообщение. Или вообще шлите сообщения ежесекундно, а в нём оставшееся время.
Сложность не в добавлении начала старта в запись) а в реализации защищенного таймера от подделок , который не зависит от клиентской даты (так как она изменяема)