2016-02-24 3 views
0

Я разработал счетчик следующим образом.Выполняющий счетчик

Я получил таймер секунд с сервера. И преобразуется в часы, минуты, секунды.

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, который отправляет данные на сервер.

Как решить эту проблему с таймером? Какие-либо предложения?

+0

Sidenote: вы отметили как php, так где же это вступает в игру? –

+0

@ Fred-ii- Я хранил таймер в php-сессии. Итак, я отметил его –

+0

, какой элемент html является '# timer'? – mjr

ответ

0

Я предлагаю хранить в сеансе, когда пользователю требуется страница, а также отправить на страницу время, сохраненное в сеансе, и сохранить таймер в интерфейсе. Когда пользователь выполняет отправку, вы проверяете на стороне сервера время, сохраненное в сеансе, и время, отправленное, конечно, будет небольшая разница в секундах или миллисекундах. Таким образом, вы можете определить маржу для рассмотрения как мошенничество.

Смежные вопросы