猿问

表单 重复 发送 解决方案

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

慕雪6442864

我们知道每个用户在访问的时候session_id都不同,可以以这个session_id作为key,实现一个简单的锁机制。例如,MySQL的内存表,设置某个字段的索引为唯一的,用户提交表单就先写一条记录(锁),如果冲突则表示重复提交。提交后处理完成后,则删除这条记录。缺点是需要额外的一个守护进程,删除那些由于意外没有被删掉的锁,当然也可以加个时间戳字段,比如超过30秒就当做锁已经失效。除了MySQL的内存表,redis也适合实现这样的简单的锁机制,这可以通过redis的事务机制来实现的。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答