防止表单重复提交的几种思路
2015-07-16 12:22
309 查看
1. 禁掉提交按钮
表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。
2. Post/Redirect/Get模式
在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。
这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。
3. 在session中存放一个特殊标志
当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。
如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。
这使你的web应用有了更高级的XSRF保护。
4. 在数据库里添加约束
在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。
总的来说,就是disable ,token, Redirect ,数据库标识
表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。
2. Post/Redirect/Get模式
在提交后执行页面重定向,这就是所谓的Post-Redirect-Get (PRG)模式。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。
这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。
3. 在session中存放一个特殊标志
当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。
如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。
这使你的web应用有了更高级的XSRF保护。
4. 在数据库里添加约束
在数据库里添加唯一约束或创建唯一索引,防止出现重复数据。这是最有效的防止重复提交数据的方法。
总的来说,就是disable ,token, Redirect ,数据库标识
相关文章推荐
- poj 3013
- Fragment详解,以开发"显示图书详情的Fragment"为例
- Laravel数据模型层M错误MassAssignmentException in Model.php line 407: username
- Afianl框架里面的FinalBitmap加载网络图片
- 调用有道词典查询
- 中文分词技术(中文分词原理)
- LeetCode#226 Invert Binary Tree
- python中的map()函数
- com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@d3ade7 ,项目启动错误
- Activity Intent相关FLAG介绍
- linux 下解压rar文件
- 日期
- hive支持sql大全
- spring 基于XML配置的Cache支持
- 对按时间先后顺序的列表按同一天进行分组
- java简单实现链表
- 解决SQL Server管理器无法连接远程数据库Error: 1326错误
- 【BLE】CC2541之参数更新
- python中的map、filter、reduce函数
- 仿新浪微博