如何禁止用户在特定时间段之前查看页面?

时间:2011-11-21 01:36:38

标签: php javascript

我想建立一个在线测验测试网站。

假设,考试将于上午10:00开始,学生登录时间为上午9:45。每当学生点击“参加考试”按钮时,他/她就无法访问问题文件,因为考试时间是上午10:00,考试开始前还有15分钟。

现在我想放一些Javascript或PHP代码,禁止学生提前参加考试,如果学生提前来,它会显示一个秒表,显示考试时间之前的剩余时间以及当前时间等于考试时间然后他/她将被直接重定向到问题纸页面。

2 个答案:

答案 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()时间时,includedie来电将永远不会被触发,页面将按正常情况加载。

警惕系统时间。 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>

这将强制页面在时间到期时自动刷新并忽略浏览器的缓存。无论服务器和用户之间的时区差异如何,此解决方案都将刷新页面。