项目背景
- 用户操作失误,多次点击提交按钮
- 由于网络卡顿导致用户多次刷新提交页面数据
- 黑客或者恶意用户使用工具(postman)恶意重复提交数据
解决方案
1.通过js解决
2.数据增加唯一键约束(unique key)
给数据表ID字段添加主键,某些字段(如:用户名、手机号、邮箱等)添加唯一性约束,确保数据库只能添加一条数据
数据库加唯一性约束sql:
alter table tableName_xxx add unique key uniq_xxx(field1, field2)
3.利用SESSION防止数据重复提交
session方式,当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,如果存在,且表单中和session中相等,那么提交表单,并立即从session中删除它。再次请求过来,如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,属于重复提交。
4.PRG模式,表单提交后,redirect到一个倒计时页面,或者信息提示页面,等有成功信息返回后,再跳转回之前页面。