拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
点击之后立即禁用该按钮,如果提交失败,再恢复该按钮,否则转成功页面。
或者点击之后,弹出一个遮罩。
不过,上述两个方案都要用到 js。为什么不想用 js 呢?
1.JS button按钮防止重复点击
2.服务端 缓存控制,方式重复写库
3.数据库建立唯一索引(比如 帖子标题唯一,不能重复)
可以从前台和后台来做控制:
添加前台控制逻辑,当用户点击发帖时,disable“发帖”按钮
添加后台控制逻辑,当发帖请求发送过来时,查看此人是否发送标题和内容一样的帖子,如果存在,则禁止此重复帖子的创建
可以在模板渲染的时候生成1个id,然后提交的时候将这个id一起提交,然后与后端进行比对,这样如果传递过来的id不对,那么就忽略处理。
第一,比较简单的解决方案是使用 debounce 函数限制 DOM 回调触发的频率。
第二,如果在这个年代还要考虑用户把 js 禁用掉的情况,那前端就不要做了。
这个问题只靠前端是解决不了的。
加缓存,单机用map,分布式用redis做缓存。
用Mysql的储存过程,把并发的压力交给数据库
加锁,乐观锁或者悲观锁
唯一键
当前页面生成一个唯一id,提交的时候服务端判断只处理一次,比如laravel的表单提交页都有个csrf_token
laravel
csrf_token
那就在后台自己写一个csrf好了,提供一下思路,自动生成一个key,提交内容的时候把key带过去,如果二者相同,就重置key或者清掉,如果不同,就是重复提交了
csrf
form表单post过去一个隐藏域的随机字符串 放到session里 程序那边接收到这个随机字符串去和session里的字符串对比 如果相同则提交 不相同则提示错误 对比的时候要重置一下这个session就可以了
1.JS验证,提交后禁用提交按钮2.服务端验证,每次刷新页面,页面中都会产生token,提交数据到服务端时判断token是否有效,然后处理数据并销毁token,如果前端重复提交肯定处理不了,因为token被销毁了
点击之后立即禁用该按钮,如果提交失败,再恢复该按钮,否则转成功页面。
或者点击之后,弹出一个遮罩。
不过,上述两个方案都要用到 js。为什么不想用 js 呢?
1.JS button按钮防止重复点击
2.服务端 缓存控制,方式重复写库
3.数据库建立唯一索引(比如 帖子标题唯一,不能重复)
可以从前台和后台来做控制:
添加前台控制逻辑,当用户点击发帖时,disable“发帖”按钮
添加后台控制逻辑,当发帖请求发送过来时,查看此人是否发送标题和内容一样的帖子,如果存在,则禁止此重复帖子的创建
可以在模板渲染的时候生成1个id,然后提交的时候将这个id一起提交,然后与后端进行比对,这样如果传递过来的id不对,那么就忽略处理。
第一,比较简单的解决方案是使用 debounce 函数限制 DOM 回调触发的频率。
第二,如果在这个年代还要考虑用户把 js 禁用掉的情况,那前端就不要做了。
这个问题只靠前端是解决不了的。
加缓存,单机用map,分布式用redis做缓存。
用Mysql的储存过程,把并发的压力交给数据库
加锁,乐观锁或者悲观锁
唯一键
当前页面生成一个唯一id,提交的时候服务端判断只处理一次,比如
laravel
的表单提交页都有个csrf_token
那就在后台自己写一个
csrf
好了,提供一下思路,自动生成一个key,提交内容的时候把key带过去,如果二者相同,就重置key或者清掉,如果不同,就是重复提交了form表单post过去一个隐藏域的随机字符串 放到session里
程序那边接收到这个随机字符串去和session里的字符串对比 如果相同则提交 不相同则提示错误 对比的时候要重置一下这个session就可以了
1.JS验证,提交后禁用提交按钮
2.服务端验证,每次刷新页面,页面中都会产生token,提交数据到服务端时判断token是否有效,然后处理数据并销毁token,如果前端重复提交肯定处理不了,因为token被销毁了