作为程序员一定要保持良好的睡眠,才能好编程

PHP秒杀抢购问答题解决方案

发布时间:2019-03-26


拒绝黄牛


1、语意问答题


我们在做秒杀的的时候,在点击抢购按钮的时候,为了防止机器人和老黄牛自动抢购,会设置一系列的阻碍机器人请求的步骤。


像我们设置的问答就是典型的方案,  让机器人无法猜测到答案,只能通过人工去确认正确答案。 这样防止机器人自动抢购。


如下面的题图:

w1.png


w2.png


看到这个题目,人们很清楚的就能可以做出判断,机器人很难知道语义的意境。


为了防止机器人,

把问答的题目,每次活动都重新设置问答题目,这样就可以有效的防止机器人。



2、视听问答题

颜色、语音、图片


通过上面这两个说明,开阔了我们思维,真正要在项目中使用,还要进行代码的编写。


 

看程序代码

每一步的请求一定要关联起来,先请求 check__status 这个接口,如果这个接口请求成功,则 getQestion 获取问题,

这样做的好处,就是为了防止跳过接口、直接去后台请求。

W3.png




问答题逻辑

1、获取到题目、随机选择一道题目

2、选择的题目获取题库中 随机的4道题

     把这四道题种的一道题 的问题 和 答案 拿出来,

      把剩下的三道题中的答案拿出来,和上边一题的答案 拼装在一个数组中,通过array_shffle 打乱顺序,返回。

      

      把ask 答案通过一定的加密算法,同时返回到客户端     

      

       这里再次添加一个时间戳, 添加时间戳是 验证用户时长。


        

      最后把整体题目 json 返回 。

      

      可以明文返回用于渲染页面,但是不要包含答案;再密文返回一个包含答案的,验证答案的时候,提交密文到服务器。  

        


3、验证问答题是否正确?

  

     通过密文 得到问题、和答案,  验证用户提交的答案是否与正确答案一致,如果一致,放行。


      否则提醒用户 问答 错误。

        

      上边设置了一个时间,我们在验证正确答案的时候,这也是需要进行验证时间的,不要时间太长。 这里设置 300 秒






解决刷问题的方法

每个人获取到的问题数量是要限制的,否则很容易被全部获取和分析,失去问题的保密性


1、每个人生成问答题,是否有作答? 如果没有 则这次再次生成这个问题; 如果已经作答,回答是否正确?正确 则下一次


question.png


通过上面的模型,防止用户刷我们的题库、失去保密性。


至于问题 保存在哪里? 

1、cookie  客户端  建议 保存在cookie 

2、服务器端 ? 这个相对来说比较复杂




点触式验证码

touclick.png