想知道如何正确地保证表单提交的幂等性吗?(二)

3、前端解决办法

①、onsubmit() 方法

在表单中增加onsubmit() 方法,该方法在表单提交时触发,返回false时,表单就不会被提交。针对用户多次点击按钮提交的问题,我们在前端控制表单提交一次之后,将 onsubmit() 方法返回值改为false,那么第二次点击提交按钮,表单将不能进行提交。想知道如何正确地保证表单提交的幂等性吗?(二)想知道如何正确地保证表单提交的幂等性吗?(二)想知道如何正确地保证表单提交的幂等性吗?(二)

②、表单提交之后,将按钮设置不可点击

想知道如何正确地保证表单提交的幂等性吗?(二)

存在问题:前面这两种方法只能应对用户多次点击提交按钮的情况,也就是上面的第一种情况。但是对于提交之后多次刷新以及点击回退按钮,再次提交的这两种情况却没有效果。这时候就需要在后端进行解决。

4、后端解决

具体做法:

在服务器端生成一个唯一的随机标识号,专业术语称为Token(令牌),同时在当前用户的Session域中保存这个Token。然后将Token发送到客户端的Form表单中,在Form表单中使用隐藏域来存储这个Token,表单提交的时候连同这个Token一起提交到服务器端,然后在服务器端判断客户端提交上来的Token与服务器端生成的Token是否一致,如果不一致,那就是重复提交了,此时服务器端就可以不处理重复提交的表单。如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。

在下列情况下,服务器程序将拒绝处理用户提交的表单请求:

1、存储Session域中的Token(令牌)与表单提交的Token(令牌)不同。(包括伪造Token)

2、当前用户的Session中不存在Token(令牌)。

3、用户提交的表单数据中没有Token(令牌)。

①、首先通过服务器端的 servlet 跳转到表单提交页面:

想知道如何正确地保证表单提交的幂等性吗?(二)

上一篇:控制域名忘记续费,三星数百万台手机陷入“任人宰割”境地


下一篇:全世界超过43%的网站居然都是这样搭建的!