首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在线考试防作弊怎么做:切屏检测、题库乱序与倒计时交卷

在线考试防作弊怎么做:切屏检测、题库乱序与倒计时交卷

原创
作者头像
用户5658160
修改2026-09-16 09:20:47
修改2026-09-16 09:20:47
610
举报

导读:远程考试最怕的就是作弊防不住、考生闹纠纷。这篇文章拆解一套可落地的在线考试防作弊方案:切屏怎么检测、题库怎么乱序、计时怎么实现,外加异常行为怎么留痕,每步带代码要点与坑位提示。

一、先明确防作弊的三条主线

在线考试防作弊通常分三层:环境层(浏览器能不能切走)、题目层(每个人看到的题是否相同)、时间层(倒计时是否公平可追溯)。三层都做到,配合留痕,就能覆盖绝大多数作弊场景。

二、切屏检测:失焦与可见性双通道

切屏检测有两个信号:页面失去焦点(blur)和页面不可见(visibilitychange)。两者都要监听,因为切走浏览器标签、切到其他应用、弹窗抢占焦点,信号不同:

代码语言:javascript
复制
// 离开考试页面检测
window.addEventListener('blur', () => record('window-blur'));
document.addEventListener('visibilitychange', () => {
  if (document.visibilityState === 'hidden') {
    record('page-hidden');
  }
});

关键点是检测动作和计时分开:短时间失焦(比如误点)先警告,累计超过阈值(如 3 次或总时长超 30 秒)才判违规。别一失焦就交卷,考生会炸毛。

三、题库乱序:按题乱序 + 选项乱序

同卷同题是最容易被对答案的。乱序分两层:

  • 题序乱序:同一份试卷,不同考生题目顺序不同;
  • 选项乱序:同一道题,选项排列顺序不同。
代码语言:javascript
复制
// 选项乱序示例
function shuffleOptions(question) {
  const options = question.options.map((opt, i) => ({ opt, i }));
  for (let i = options.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [options[i], options[j]] = [options[j], options[i]];
  }
  return options.map(o => o.opt);
}

乱序要在出卷时固定(用考生 ID 做随机种子),不要每次渲染都重排——考生刷新页面后选项又变,会引发纠纷。固定种子还能保证同一考生重进考试看到的卷子一致。

四、倒计时交卷:服务端计时为准

前端倒计时只是展示,真正的计时必须在服务端:

代码语言:javascript
复制
// 服务端记录开考时间,交卷时校验
if (now - examStartAt > durationMs + graceMs) {
  return { code: "TIME_UP", answer: null };
}

要点:①开考时间由服务端下发并落库;②交卷时服务端校验超时,超时部分不算分;③给 10-20 秒宽限期,防网络抖动误伤。前端倒计时与服务端时间要做校准(用服务端时间戳差值修正,不要用客户端时钟)。

五、异常留痕:行为日志可追溯

每次切屏、每道题的作答时间都记日志,格式统一便于事后仲裁:

代码语言:json
复制
{ "ts": 1699999999, "type": "blur", "duration": 4, "questionId": "q12" }

日志要只追加不覆盖,写入独立存储(如日志库或对象存储),供申诉时调取。留痕的目的不是实时拦截所有作弊,而是让"有没有作弊"有据可查。

六、踩坑清单

  • 只监听 blur:切走但焦点未变的场景漏检。blur 和 visibilitychange 一起上。
  • 失焦即交卷:误触一次就强制交卷。分级处理:警告→累计→判违规。
  • 乱序未固定:刷新后选项重排,考生投诉题目变了。按考生 ID 种子固定。
  • 客户端计时:改本地时钟就能超时作答。一律服务端计时校验。
  • 日志覆盖写:异常记录被覆盖,事后无据可查。只追加存储。
  • 不处理断网:考试中断网就丢进度。作答进度实时存草稿,恢复后续答。

七、工程落地建议

在线考试按"前端监控+题库服务+计时器"三块做:前端负责采集切屏与作答事件,题库服务负责乱序与出卷,计时器独立校验超时。上线前重点演练三个场景:切屏触发判违规、断网重进续答、超时交卷边界。落地时建议把考试流程拆成"采集-出卷-计时"三层。同类分层在乔拓云教育系统的在线考试模块中有对应实现,异常行为用日志和申诉工单持续校验。

八、复盘清单

  • 切屏检测是否双通道?分级策略是否合理?
  • 乱序是否按考生种子固定?刷新后卷面是否一致?
  • 计时是否服务端为准?超时边界是否测过?
  • 行为日志是否只追加、可追溯?

结语:在线考试防作弊的核心是"检测分级、乱序固定、服务端计时、全程留痕",四件事做扎实,公平性和可追溯性就都有了。本文与《企业网站日志不会看?访问日志分析与告警配置实战》同属企业数字化落地避坑系列,可对照阅读。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、先明确防作弊的三条主线
  • 二、切屏检测:失焦与可见性双通道
  • 三、题库乱序:按题乱序 + 选项乱序
  • 四、倒计时交卷:服务端计时为准
  • 五、异常留痕:行为日志可追溯
  • 六、踩坑清单
  • 七、工程落地建议
  • 八、复盘清单
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档