逻辑是:
查询表A,看是否符合条件
符合条件,执行正常逻辑,把表A的条件修改成否现在遇到的问题是,表A的条件修改还没执行完,下一条语句又来了,导致执行了N次正常逻辑
这个地方该怎么控制呢?比如说csdn的这个每天登陆一次送可用分,应该是查询一个最好活跃时间,如果最后活跃时间不是今天,说明是第一次登陆,送分,然后更改活跃时间如果页面刷新足够快,还没有执行完更改活跃时间又刷新了一下,导致送了两次分,在非InnoDB的结构中怎么实现控制
查询表A,看是否符合条件
符合条件,执行正常逻辑,把表A的条件修改成否现在遇到的问题是,表A的条件修改还没执行完,下一条语句又来了,导致执行了N次正常逻辑
这个地方该怎么控制呢?比如说csdn的这个每天登陆一次送可用分,应该是查询一个最好活跃时间,如果最后活跃时间不是今天,说明是第一次登陆,送分,然后更改活跃时间如果页面刷新足够快,还没有执行完更改活跃时间又刷新了一下,导致送了两次分,在非InnoDB的结构中怎么实现控制
一次注册完成,在“注册完成画面”刷新浏览器,只是相同用户信息重复注册的漏洞,这都是相近的问题。-治标的解决方法:
链接或者按钮使用JavaScript控制,默认状态下有效,如果被按下一次就让其失效。
此方法实现起来比较方便,缺点是治标不治本。不过,对于大多数网站已经够用了。-治本的解决方法:
1.在form中镶入hidden的标示字串,在同一session内,做过更新处理之后,更换此字串。
2.更新处理时,客户端发送的标示字串跟session内保存的字串不同,就禁止处理,相同则允许处理。
此方法如果没有框架支持,实现成本比较高,但是最根本的解决办法。
在查询之前设置状态为1,查询之后,更新可用分或其它操作完成再把状态设为0
如果状态为1时再刷新,就提示系统忙