Я разработал счетчик следующим образом.Выполняющий счетчик
Я получил таймер секунд с сервера. И преобразуется в часы, минуты, секунды.
timerInterval = setInterval(
function()
{
if(hours.toString().length == 1){hours = "0"+hours;}
if(minutes.toString().length == 1){minutes = "0"+minutes;}
if(seconds.toString().length == 1){seconds = "0"+seconds;}
if(seconds > 0){
seconds--;
if(seconds.toString().length == 1){seconds = "0"+seconds;}
}
else if(seconds == 0 && (minutes > 0)){
minutes = minutes - 1;
seconds = 59;
}
else if(minutes == 0 && (hours > 0)){
hours = hours - 1;
minutes = 59;
}
if(hours == 0 && minutes ==0 && seconds ==0){
clearInterval(timerInterval);
localStorage.removeItem("endTime");
$(".submitTest").click();
}
$("#timer").html(hours+":"+minutes+":"+seconds);
localStorage['endTime'] = (hours*3600+minutes*60+seconds);
},1000);
Он отображает таймер.
Проблема с этим
Пользователь может редактировать таймер и обмануть.
решения я нашел
1) хранить таймер в последний раз в стороне сервера. Когда пользователь отправляет, мы можем вычислить время отправки на время, хранящееся на сервере.
**Problem**: If I send submission time, user can edit it. So no use of storing
it in the server.
2) Я могу просто отправить данные на сервер, когда таймер истечет или отправлен пользователем. И проверю текущее время на время хранения на сервере.
Задача: Хранится время на сервере: 10:25 PM. Сервер отправляет данные клиенту с продолжительностью 25 минут во время 10:00 вечера.
Должна задерживаться передача данных клиенту. Например, он достигает 10:00 05 секунд. И пользователь отправляется ровно через 25 минут [время таймера истекает]. И должна быть задержка в данных, которые доходят до сервера. Таким образом, он достигает 10:25 20 с [05 + 15 секунд задержки]. Я сохранил время окончания на сервере в 22:25. Таким образом, 20-секундная задержка не сработает, как пользователь обманул.
Решение должно иметь +/- время. Например, я бы разрешил 10:27 вечера в качестве действительного времени [2мин дополнительно]
Но как этот 2мин будет действительным?
3) Server Sent Events Я столкнулся с той же проблемой, что и второй. Но здесь решение отличается: если таймер истекает на стороне сервера, собирайте данные от пользователя, не дожидаясь его представления и выполняйте действие отправки на стороне сервера. Но все же пользователь может остановить JS, который отправляет данные на сервер.
Как решить эту проблему с таймером? Какие-либо предложения?
Sidenote: вы отметили как php, так где же это вступает в игру? –
@ Fred-ii- Я хранил таймер в php-сессии. Итак, я отметил его –
, какой элемент html является '# timer'? – mjr