表单重复提交有三种常见的情况:
1.提交完表单,服务器使用的是请求转发来进行页面的跳转,那么当表单提交,跳到指定页面后,如果用户不断刷新页面,那么由于使用的是请求转发,那么表单提交的请求将会不断发起,最终造成表单重复提交。
这种情况的解决办法就是,使用重定向来进行页面跳转。
2.由于网络时延,用户未及时收到服务器响应,随后多次进行提交操作,这种情况也会导致表单重复提交。
3.用户正常提交服务器,服务器及时响应,但是由于在提交完成后,用户回退浏览器,造成重新提交,这也会造成表单重复提交。
情况2、3的解决办法就是使用验证码。为什么使用验证码可以解决情况2、3呢?下面说明一下其原理。
当客户端第一次访问服务器时,获取对应表单信息的时候,服务器会先随机生成一个验证码,然后将这个验证码存在Session域中。当客户端第一次提交表单时,服务器会将Session域中的验证码删除,然后比较提交客户端输入的验证码和其一开始生成验证码是否一致。
之后,若客户端重复提交表单,但是由于服务器已经将Session中对应的验证码删除,那么服务器此时就可以知道,这个表单是重复提交了,不应该进行操作。