[请益] 如何确保使用者确实在刚好5分钟作答

楼主: freebug (Freebug)   2023-01-28 20:32:17
我最近在开发一个“线上测验”的网页
前端配合后端PHP
线上测验的系统要刚好在5分钟让使用者作答
不能提早交卷也不能迟交
虽然我可以用前端的JavaScript 计时器计时
不过这样只能防君子不能防小人
不法人士还是可以透过开发者工具伪造请求绕过网页的计时器
所以这问题势必要用后端来解决
我起初的想法是在后端开始出题时先用session记录当时的timestamp
然后之后当服务器后端接收到任一请求时,检查收到时的timestamp跟当初session记录的
timestamp相减是否刚好为5分钟
不过这样又会有另外一个问题
因为网络传递请求一定会有延迟
而每次的延迟时间都不同(也会根据使用者网络情况有所差异)
所以不管前端后端好像都无解?
各位有什么想法吗?
作者: bency (林班西)   2023-01-28 21:33:00
把时间存在 db 勒?
作者: LPH66 (-6.2598534e+18f)   2023-01-28 23:31:00
我会觉得你这个前后端都要做, 前端做为正好 5 分钟的接口后端 PHP 则检查是否时间正确不过网络延迟这个无解, 你只能容许某个程度的误差(例如容许超过半秒到一秒等)
作者: Isaea (Isaea)   2023-02-06 22:40:00
开始测验先存时间结束在判断?
作者: okgogogo ( )   2023-02-09 13:35:00
以前学校的是个程式,锁死还不能跳出程式,避免你上网查
作者: keoy7am (keoy7am)   2023-02-21 01:04:00
永远不能相信前端,必须后端解决,以下思路供参考。推荐使用websocket. OnConnected时enqueue 到答卷列表中(如测试id 、userId、时间戳等),是否透过websocket执行交卷逻辑或仅做计时服务就看规划,倘若使用量大我会将这做单一计时服务,交卷则透过使用测验id 、使用者id 取得是否超时,时间永远是该计时服务的时程故不用考虑对时。

Links booklink

Contact Us: admin [ a t ] ucptt.com