重复提交指的是 同一个请求(请求地址和请求参数都相同)在很短的时间内多次提交至服务器 ,从而对服务器造成不必要的资源浪费,甚至在代码不健壮的情况还会导致程序出错。重复提交的原因或触发事件包括:
-
一次请求处理过慢,用户等不及点了多次提交按钮。
-
提交请求之后,用户又多次点了刷新按钮或者点了回退。
-
同时打开了多个窗口提交数据。
-
用户在页面多次点击提交按钮,或者通过不断刷新页面,把已经提交过的数据多次向后台提交。
-
由于网络波动,页面没有响应,此时用户又点击了一次注册按钮(多次点击),导致传输了两次相同的数据。
重复提交的危害性包括:
-
对于查询类的功能,问题还不是太大,但对于新增或是修改类的功能,可能凭空出现很多同样信息的重复数据,从而导致业务功能出现错误。
-
重复提交可能会导致服务器负载增加,严重甚至会造成服务器宕机。
-
重复提交可能会导致数据重复操作或者产生不一致的结果。
为了防止重复提交,可以采取以下解决方案:
-
在客户端和服务器端都进行请求的合法性检查,确保一个请求只被处理一次。
-
使用令牌(Token)机制,在请求时生成一个唯一的令牌,服务器端在处理请求时验证令牌的有效性,防止重复提交。
-
在前端进行多次点击的防抖处理,避免用户在短时间内多次点击提交按钮。
-
对于网络波动或延迟导致的重复提交,可以在客户端增加重试机制,但要注意避免无限重试。
-
在服务器端使用数据库约束(如唯一约束)来防止重复数据的插入。