我正在为一家教育机构编写一个在线考试网站。可以为每次评估设置时间限制,一旦用户开始考试,就会在服务器上创建一个新的时间戳。问题是我们学校的电脑经常死机,学生被迫重启,浪费了考试时间。
我发现我可以将计时器存储为 cookie,但这很容易被破坏。有什么建议么?谢谢。
您可以将时间戳存储在链接到他们的用户的数据库中(如果他们正在考试,我会假设他们已经登录)并每隔几秒钟执行一次 ajax 调用以检查他们是否仍然在线。
在此 ajax 检查中,您可以使用新的时间戳更新数据库,该时间戳指示它们上次在线的时间,因此如果计算机锁定并且必须重新启动,您可以计算出丢失了多少时间。
您可以生成唯一的散列以将其存储在 cookie 中,例如
$cookie = md5( $student_name . $test_start_timestamp . $computer_ip );
并将所有需要的信息存储在数据库中,例如:
INSERT INTO examination
SET student_hash = '$cookie',
test_start = '$test_start_timestamp',
computer_ip = '$computer_ip'
稍后(如果重新启动计算机)您可以从数据库中获取所有信息:
SELECT * FROM examination
WHERE student_hash = '$cookie'
这样学生将无法更改时间戳
虽然我意识到这有时可能很困难,但解决您的困境的唯一真正可靠的解决方案是可靠的网络。
但是如果没有其他确认客户状态的通信媒体或途径呢?您能否确认域控制器可以看到 LAN 上的客户端?如果 PC 存在但 Web 客户端不存在,则更有可能是用户操纵的情况。某些东西(域控制器、其他网络位置?)可以注意到网络中客户端的出现或消失吗?
任何方法都可能以某种方式被滥用。我认为唯一真正的保证将来自对频率和用户体验重启的人工监控。