Home >Backend Development >PHP Tutorial >javascript - 大家有哪些防止表单重复提交的妙招,说来听听呗!!

javascript - 大家有哪些防止表单重复提交的妙招,说来听听呗!!

WBOY
WBOYOriginal
2016-06-06 20:46:331120browse

大家有哪些防止表单重复提交的妙招,说来听听呗!!详细点,谢谢

回复内容:

大家有哪些防止表单重复提交的妙招,说来听听呗!!详细点,谢谢

禁掉提交按钮
表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。

Post/Redirect/Get模式
在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。

这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。

在session中存放一个特殊标志
当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。

如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

这使你的web应用有了更高级的XSRF保护。

在数据库里添加约束
在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。

上面的信息来自开源中国

其实说了这么多,就是disable ,token, Redirect ,数据库标识

对于前端的话,如果你用 Bootstrap ,可以用其自带的JS插件button.js,可以很轻松地集成到页面上。

javascript - 大家有哪些防止表单重复提交的妙招,说来听听呗!!

传送门:http://v3.bootcss.com/javascript/#buttons

我先来一个,直接检查数据库有没有重复内容~ 以及防止重复什么的, @管理猿 这个可以有!

在session中存放一个特殊标志
当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。
如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。
这使你的web应用有了更高级的XSRF保护。

这样的判断,如果在用户ctrl+click开多个网页的话,旧的网页TOKEN总是无效的呀。如果是一个TOKEN数组,这样做就会造成TOKEN无穷的隐患。

怎么破?

表单提交时,给个事件,修改 token (就是防 csrf那个)字段的值,使其失效。
被采纳的答案,前两个都是客户端搞一搞,问题是有时候用户点的太快,还真就提交了两次、
这种事必须得在服务端验证,每一个表单,在其所有生命周期给定一个session,主要意义还是防止攻击,额外作用是避免重复提交,请搜我前面提到的 csrf,理解这个就知道怎么做了。

在session中存放一个特殊标志就是所谓的token技术~~

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn