如何使用计时器重定向用户
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 秒。
- 绕过用户 "cheating" 计时器的唯一方法是使计时器依赖于服务器时间。这意味着您必须让服务器传递一些数据。例如,每次用户开始回答问题时,设置一个会话对象(或类似的对象),然后在用户完成回答后清除它。所以当用户开始回答问题时,检查数据是否存在,并计算剩余时间。
- 如果您不希望计时器依赖于服务器,您可以将函数设为匿名。当函数是匿名的时,您可以获得一定程度的保密性。
.
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);
}();
做个小测验,想限时答题
所以用户只需要将他的答案放在表格中,然后进行验证。验证将重定向到页面 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 秒。
- 绕过用户 "cheating" 计时器的唯一方法是使计时器依赖于服务器时间。这意味着您必须让服务器传递一些数据。例如,每次用户开始回答问题时,设置一个会话对象(或类似的对象),然后在用户完成回答后清除它。所以当用户开始回答问题时,检查数据是否存在,并计算剩余时间。
- 如果您不希望计时器依赖于服务器,您可以将函数设为匿名。当函数是匿名的时,您可以获得一定程度的保密性。
.
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);
}();