关于防止表单表达重复提交的几个解决方法
表达重复提交的问题,是B/S系统开发中经常容易被忽视,但常常又令程序员头疼的一个问题。根据墨菲定律,如果你不做防止重复提交的机制,那些用户行为往往就会给你带来麻烦,然后就等着产品经理的抱怨吧。下面,我就总结了几条常见的关于B/S系统中防止表单重复提交的几个办法:
1.页面上控制。怕用户点击提交按钮2次?用javascript控制下吧;怕用户后退导致重复提交?那就干脆打开个新页面吧。总之你要设想到用户在页面上的所有可能的操作,把这些容易导致BUG的操作消灭的萌芽中。
2.session控制。如果实在避免不了用户的重复提交操作,那就加个token吧。具体代码网上有,原理是在用户第一次提交的时候生成一个令牌存在session里,每次提交的时候比对下,如果2次提交的token一样的话,说明是重复提交了。
3.跳转控制。一般表达提交的时候,我会了返回方便经常使用forward(内部重定向)而不使用redirect(外部重定向),因为根据返回的结果要给一些错误提示什么的。但是使用内部重定向的话,会有个问题,就是用户提交完以后点击浏览器的刷新按钮,上一次的提交操作就会被重新发送一次(虽然浏览器有提示,但是你不能指望用户会看提示)。所以更好的办法是,提交后使用外部重定向的方法到下个页面,这样用户刷新也是刷新下一个页面的打开操作了。
PS.也许有人会问,使用外部重定向的话,那返回的result参数怎么传,链接后面带参数的话既难看又不方便。我推荐使用cookie来保存结果状态,临时保存,用完即清,很方便。