PHP:公式输入的计时器

时间:2010-07-09 07:24:47

标签: php

我正在使用PHP编写基于Web的考试应用程序。

  • 考生必须选择一组带有相应问题的模块。
  • 模块表示为单一形式。
  • 对于每个模块,例如30分钟。

如果30分钟结束,表格的状态将会发生 (答案和未答复的问题将存储在数据库中)和 表格将被关闭,例如重定向到菜单页面。我试过类似的东西 的是:

PHP:

<?php
    set_time_limit('30000');
    function redirect(){
      // Some Stuff
    }
    $i = 1;
    while($i <= 45){
      sleep('60');
      callthis();
      flush();
      $i++;
    }
?>

在我的hoster中,由于PHP的安全模式,无法使用set_time_limit。

表单中最可靠的基于服务器的解决方案(无Javascript)是什么 PHP中的计时器?

3 个答案:

答案 0 :(得分:3)

这是一个简单的方法

  • 生成与用户帐户相关联的唯一标记值
  • 将此标记与开始时间一起存储在数据库或会话变量
  • 将令牌嵌入表单中作为隐藏字段

提交表单时,您只需检查最近30分钟内生成的令牌。您可以实现一些客户端倒计时作为对用户的帮助,但实际时间必须在服务器端进行。

您需要添加一些额外的安全检查和平衡,例如确保登录用户一次只能有一个令牌。

答案 1 :(得分:1)

您需要在会话变量或等效的持久方法中存储测试开始的时间,并检查每个表单提交的已用时间。 (确保会话超时比测试持续时间更长或更长。)您可以显示一个静态编号,指定每次重新加载页面的剩余时间。如果您想显示倒计时,则需要使用javascript。

答案 2 :(得分:0)

HTTP是无状态协议。这意味着PHP程序的控制流程如下:

  • 用户请求您的某个页面
  • PHP代码生成页面
  • 页面已发送给用户。此时,PHP 已完成运行

为了跟进,您必须在用户端运行某些内容。即,JavaScript。这可以告知用户他们的时间到了。此外,您还可以检查表单呈现给用户和提交表单之间的时间差异。但是这个处理不会发生直到用户返回PHP才能获得另一个页面。