如何使用计时器重定向用户

时间:2015-02-03 13:59:07

标签: javascript php redirect timer

做一种quizz,我想在有限的时间内回答问题。

因此,用户只需将答案放在表单中,然后进行验证即可。 Validate将重定向到process.php页面,该页面将检查所有内容。

如果用户未及时回答,则会将空表格汇总。 (因为错误的答案和空洞的答案都有相同的反响)

我知道有一些方法,使用元标记(html)或标题(php),但这不是我正在寻找的,代码定制的原因或安全原因。

实际上,我得到了这段代码。

<p>You will be redirected in <span id="counter">10</span> second(s).</p>
<script type="text/javascript">
function countdown() {
    var i = document.getElementById('counter');
    if (parseInt(i.innerHTML)<=0) {
        location.href = 'process.php';
    }
    i.innerHTML = parseInt(i.innerHTML)-1;
}
setInterval(function(){ countdown(); },1000);
</script>

但这不是我想要的,因为用户可以轻松更改定时器,设置更大的值。

我还查看PHP function microtime(),将其放入会话中,如果计时器未更改,请检查我的process.php。但我失败了。

  • 有没有一种简单的方法可以解决这个问题?
  • 如何真正确保答案时间,并防止更改计时器?

2 个答案:

答案 0 :(得分:1)

您可以使用JQuery在倒计时结束时简单地提交表单:

// When DOM is fully loaded
$(function() {
    var countDown = 5000;

    // Will occur after "countDown" / 1000 seconds
    setTimeout(function() {
            $("#theQuizzForm").submit();
        },
        countDown
    );
});

假设您的form形状如此:

<form method = "whatever" action="process.php">
    <!-- html elements -->
</form>

使用setTimeout会在 countDown / 1000秒后提交表单,这是5秒。

答案 1 :(得分:1)

  1. 绕过用户从计时器中“欺骗”的唯一方法是使计时器取决于服务器时间。这意味着您必须通过服务器传递一些数据。例如,每次用户开始回答问题时,设置会话对象(或等效的对象),然后在用户完成回答时将其清除。因此,当用户开始回答问题时,请检查数据是否存在,并计算剩余时间。
  2. 如果您不希望计时器依赖于服务器,则可以使该功能保持匿名。当函数是匿名函数时,您可以获得一定程度的保密性。
  3. function(){
        var a = setInterval(function(){ 
            i = document.getElementById('counter');
            if (parseInt(i.innerHTML)<=0) {
                clearInterval(a);
                document.getElementById('formName').submit();
            }
            i.innerHTML = parseInt(i.innerHTML, 10) - 1;
         },1000);
    }();