84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
拥有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被销毁了