最近在某个系统的应用中碰到了token无法解决重复提交的问题。
在经过询问和研究后总结如下:
1、通过添加令牌在客户端,在请求中验证令牌的方式无法防止用户通过浏览器快速点击多次提交;
原因:用户快速点击提交的时候,服务器端处理了第一个请求以后才会对客户端的令牌进行操作,而第二个请求提交的数据是在服务器端处理令牌之前发出的。如下图:
上图中的请求1和2所发送的rundata是一摸一样的,所以服务器在处理完请求1的响应对于请求2没有任何效果。
2、预防用户通过浏览器快速点击解决方案之一:点击按钮以后通过js禁用按钮;
3、预防重复提交最有效的方法只能通过服务器端保存状态数据;
4、令牌配合js禁用按钮能解决一部分问题。
测试重复提交方法总结:
1、提交请求后F5刷新;
2、截获请求,多次提交。