作者freebug (Freebug)
看板PHP
标题[请益] 如何确保使用者确实在刚好5分钟作答
时间Sat Jan 28 20:32:17 2023
我最近在开发一个「线上测验」的网页
前端配合後端PHP
线上测验的系统要刚好在5分钟让使用者作答
不能提早交卷也不能迟交
虽然我可以用前端的JavaScript 计时器计时
不过这样只能防君子不能防小人
不法人士还是可以透过开发者工具伪造请求绕过网页的计时器
所以这问题势必要用後端来解决
我起初的想法是在後端开始出题时先用session记录当时的timestamp
然後之後当伺服器後端接收到任一请求时,检查收到时的timestamp跟当初session记录的
timestamp相减是否刚好为5分钟
不过这样又会有另外一个问题
因为网路传递请求一定会有延迟
而每次的延迟时间都不同(也会根据使用者网路情况有所差异)
所以不管前端後端好像都无解?
各位有什麽想法吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 39.12.25.127 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/PHP/M.1674909139.A.28B.html
1F:推 bency: 把时间存在 db 勒? 01/28 21:33
2F:推 LPH66: 我会觉得你这个前後端都要做, 前端做为正好 5 分钟的介面 01/28 23:31
3F:→ LPH66: 後端 PHP 则检查是否时间正确 01/28 23:31
4F:→ LPH66: 不过网路延迟这个无解, 你只能容许某个程度的误差 01/28 23:32
5F:→ LPH66: (例如容许超过半秒到一秒等) 01/28 23:32
6F:推 Isaea: 开始测验先存时间结束在判断? 02/06 22:40
7F:推 okgogogo: 以前学校的是个程式,锁死还不能跳出程式,避免你上网 02/09 13:35
8F:→ okgogogo: 查 02/09 13:35
9F:推 keoy7am: 永远不能相信前端,必须後端解决,以下思路供参考。推荐 02/21 01:04
10F:→ keoy7am: 使用websocket. OnConnected时enqueue 到答卷列表中(如 02/21 01:04
11F:→ keoy7am: 测试id 、userId、时间戳等),是否透过websocket执行 02/21 01:04
12F:→ keoy7am: 交卷逻辑或仅做计时服务就看规划,倘若使用量大我会将这 02/21 01:04
13F:→ keoy7am: 做单一计时服务,交卷则透过使用测验id 、使用者id 取得 02/21 01:04
14F:→ keoy7am: 是否超时,时间永远是该计时服务的时程故不用考虑对时。 02/21 01:04