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

How to redirect a user with a timer

做个小测验,想限时答题

所以用户只需要将他的答案放在表格中,然后进行验证。验证将重定向到页面 process.php,它将检查所有内容。

如果用户没有及时回答,将提交空表。 (因为错误的答案和空洞的答案得到相同的反响)

我知道有一些方法,使用元标记 (html) 或 header (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(),将其放入 session,如果计时器未更改,请检查我的 process.php。但是我失败了。

您可以使用 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. 绕过用户 "cheating" 计时器的唯一方法是使计时器依赖于服务器时间。这意味着您必须让服务器传递一些数据。例如,每次用户开始回答问题时,设置一个会话对象(或类似的对象),然后在用户完成回答后清除它。所以当用户开始回答问题时,检查数据是否存在,并计算剩余时间。
  2. 如果您不希望计时器依赖于服务器,您可以将函数设为匿名。当函数是匿名的时,您可以获得一定程度的保密性。

.

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);
}();