我想建立一个在线测验测试网站。
假设,考试将于上午10:00开始,学生登录时间为上午9:45。每当学生点击“参加考试”按钮时,他/她就无法访问问题文件,因为考试时间是上午10:00,考试开始前还有15分钟。
现在我想放一些Javascript或PHP代码,禁止学生提前参加考试,如果学生提前来,它会显示一个秒表,显示考试时间之前的剩余时间以及当前时间等于考试时间然后他/她将被直接重定向到问题纸页面。
答案 0 :(得分:0)
我不相信JavaScript,因为用户可以在他/她的浏览器上禁用Javascript来绕过安全性。您应该查看一些服务器端方法,可能是某些脚本将在特定的给定日期和时间发布您的网站。
您没有指定您的操作系统和Web服务器,但是您是使用Linux / Apache还是Windows / IIS,从批处理脚本执行此类操作应该不会太困难。
<强>更新强>
为您的应用设置2个着陆页,其中一个有一个正文表示this app will be available starting at 10 AM
的内容,并创建一个任务(Control Panel-> Admin Tools -> Task Scheduler
),该临时着陆页将替换为10给定日期的AM。这够容易吗?
答案 1 :(得分:0)
在您希望禁止早期访问的每个PHP脚本的顶部,您可能希望包含以下内容:
if (mktime(12, 0, 0, 1, 1, 2012) > time()) {
require 'waiting.php';
die;
}
您应该查看mktime() PHP documentation,了解如何指定您希望用作阈值的日期和时间。
当当前时间小于 2011年1月1日中午时,上面的示例将include waiting.php
脚本。 die
函数阻止PHP加载页面中的任何其他内容,从而有效地阻止访问。当前时间超过mktime()
时间时,include
和die
来电将永远不会被触发,页面将按正常情况加载。
警惕系统时间。 mktime()
将使用系统的时间,该时间可能与您要运行测试的时区不同。在调用mktime()
之前,您应该使用date_default_timezone_set()设置时区。
例如:
date_default_timezone_set('America/Los_Angeles');
最后。正如其他评论中所提到的,单独的JavaScript检测 是不可靠的,不仅因为它易于规避,而且因为不能保证用户的时间与服务器的时间相同。
假设您想在超时完成后刷新页面。我会在waiting.php
中加入以下内容:
<?php
$miliseconds_remaining = (mktime(12, 0, 0, 1, 1, 2011) - time()) * 1000;
?>
<script type="text/javascript">
window.setTimeout(function() {
window.reload(true);
}, <?php echo $miliseconds_remaining;?>);
</script>
这将强制页面在时间到期时自动刷新并忽略浏览器的缓存。无论服务器和用户之间的时区差异如何,此解决方案都将刷新页面。