发表于 2020-07-18 03:32:12 ,最后修改于 2020-07-18 03:47:12

三年多前,为了帮助我司客户更好地检验学生的学习效果、进行网上抢答赛、统计分析相关数据,我们制作了一个在线测试系统。现在试着简单回忆一下?

系统于 2016 年末完工,2017 年初投入使用。管理员可预设一道或多道填空题并请学生回答。重点设计了这些特点:

用户可见的部分使用了 Bootstrap 3,自适应移动设备和桌面设备(然而 80%+ 以上的用户选择移动设备)。一开始是手写的,中途带来过小程序(但因当时小程序对于这点使用要求还没有那么必须,直到 2020 年初,小程序才真正发挥优势),后期用 Vue.js 重写;用户不可见的部分使用了 php 5,后期迁移到了 php 7;数据库一直使用 MySQL。


帐户体系方面,支持(少数情况下,变相支持)一个帐户,通行所有服务和后期新开的服务,感觉效果还是可以的。

注册功能,从电子邮箱 + 手机号(注册后,凭手机号登录,凭电子邮箱找回密码)升级到了手机号通行(注册后,凭手机号登录、找回密码),又升级到了微信登录(不需要密码)。

登录功能,从密码登录升级到了扫码登录,升级到了短信验证码登录(防忘密码),升级到了微信登录(不需要密码)。

个性化功能,后期支持了自定义头像和在线聊天。中途试过给头像加上内容安全,但因体验不理想放弃。截至目前,聊天记录为永久保存。


信息安全方面,从运行的第一天起,用户的密码即是不明文存储的。此外,从运行的第一天起,即支持了两步验证(通过手机验证程序)。我试过,如果忘了带手机,自己都无法登录自己的帐户。两步验证同样开放给普通用户,但是开通的人很少。

起初连续输错 6 次密码,当天 23 时 59 分 59 秒及之前不再接受登录。但因用户反映机会太少,及发现可以通过 “5 错 1 对、5 错 1 对” 的方式绕过,后期修改成了当天有 100 次及以上登录失败记录的,当天 23 时 59 分 59 秒及之前不再接受登录。

2019 年末不再支持被 npmjs.com 拒绝的密码:https://www.npmjs.com/signup/common-passwords (主要是 123456 什么的)。

邮件验证码采用了 SMTP,后因邮箱从帐户体系中清除,停用。

短信验证码先后用过某些小厂、阿里大于(原来叫:“阿里大鱼”)、阿里云通信、腾讯云。

2020 年初把验证码从图片验证码升级到了 No Captcha reCAPTCHA,因部分用户反映不会做 reCAPTCHA,后期又增加了腾讯验证码。

截至目前,日志为永久保存。


数据处理方面,用户有答案 / 帐密组合等提交时,会发送到相应 API(起初以 /api/ 开头,后期拥有了独立的域名)。处理好后,API 会返回相应的数据(大多为 json)给用户。后期新开的所有其他客户端(如:小程序)都使用一样的 API。


这套系统为我带来了非常重要的与真实用户往来的经验、突然访问量特别大的应对经验和其他相应的开发经验。感谢客户的信任和支持,感谢用户的激情测试和体验,感谢 Codetector、zrt、QY 同学的认真指导,感谢汇丰中国个人网银让我对 reCAPTCHA 的实际应用产生兴趣。