实施柜台

时间:2016-02-24 17:24:46

标签: javascript php jquery html timer

我设计的计数器如下。

我从服务器得到了秒钟。并转换为小时,分钟,秒。

   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。           服务器将数据发送到客户端,持续时间为晚上10点的25分钟。

数据到达客户端必须有延迟。例如,它到达10:00 05秒。并且用户在25分钟后准确提交[表示计时器到期]。并且到达服务器的数据必须有延迟。所以它在10:25 20s [05 + 15秒延迟]达到。我将结束时间存储在服务器中,时间是晚上10:25。因此,当用户作弊时,20秒的延迟会失败。

解决方案是有+/-时间。例如,我允许10:27 pm作为有效时间[2分钟额外]

但是这2分钟怎么会是有效的呢?

3)服务器已发送事件      我遇到的问题与第二个问题相同。      但是这里的解决方案是不同的:如果计时器在服务器端到期,则从用户收集数据而不等待他的提交,并在服务器端执行提交操作。但仍然可以阻止JS将数据发送到服务器。

如何解决此计时器问题?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我建议在用户需要页面时存储会话,并将会话中存储的时间发送到页面并保持计时器在前端运行。当用户进行提交时,您在服务器端检查存储在会话中的时间和提交的时间,当然会有几秒或几毫秒的差异。因此,您可以定义一个保证金作为欺诈行为。