为了账号安全,请及时绑定邮箱和手机立即绑定

用户提交的表单,有的时候会因为网络延迟重复提交内容

用户提交的表单,有的时候会因为网络延迟重复提交内容

守着星空守着你 2023-04-25 23:19:48
我遇到的是通过ajax方式提交,所以还停留在本页面,但是回馈没做好,总之用户没感知到,还会继续点击发送按钮,结果一下就出现了好多条嗯,大概说说自己的想法,希望能得大家的指点:前端:前端的话,当表单提交,这时候按钮变成disable状态后端:生成一个token放在表单的隐藏字段里,服务器端保留,并等待带用户提交时对照令牌我的问题是:1.在真正的应用环境里,一般这种情况只做前端或者后端的处理是不是足够2.如果要生成令牌的话,保存在哪里合适,session或者数据库里,当然session可能本身就在内存里不是文件3.保存多少条合适,会不会有用户开来了无数的页面造成数据过量...可能是恶意用户4.也许这也涉及到令牌保存多长时间,比如写一篇文章的时间和回复一篇文章的时间也不一样,是不是需要考虑5.这里令牌的生成有没有特殊讲究谢谢大家了啦~!问题还算有一般性吧,不过我用的环境是php apache mysql
查看完整描述

1 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

我们知道每个用户在访问的时候session_id都不同,可以以这个session_id作为key,实现一个简单的锁机制。

例如,MySQL 的内存表,设置某个字段的索引为唯一的,用户提交表单就先写一条记录(锁),如果冲突则表示重复提交。提交后处理完成后,则删除这条记录。缺点是需要额外的一个守护进程,删除那些由于意外没有被删掉的锁,当然也可以加个时间戳字段,比如超过30秒就当做锁已经失效。

除了 MySQL 的内存表,redis 也适合实现这样的简单的锁机制,这可以通过 redis 的事务机制来实现的。


查看完整回答
反对 回复 2023-04-28
  • 1 回答
  • 0 关注
  • 252 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信