关于防止表单重复提交的做法有很多,本人知道的有如下,只是简单讲讲,大家觉得什么办法最简单又有效?
1.有redis的环境
把提交的动作action,参数之类的作为redis的key,存进redis,设置一个很短的缓存时间,提交的时候判断如果存在这个key,说明是重复提交数据。
2.jquery前端判断
除了在程序端判断重复提交外,在页面前端也加一层措施,如点击提交按钮,按钮状态不可用(有的按钮用的a标签),如果不是按钮button,可以用jquery在提交的时候设置一个属性值,如果有了这个属性值,表示已经提交。
$("body").data("applycancel","unlock");
3.表单隐藏域token
生成一个随机数,放进session,给表单加一个隐藏域放进token,提交的时候判断表单的token隐藏域和session的值是否一致,如果不一致表示重复提交,处理表单的时候unset掉这个session。
各位还有什么办法,什么办法最好,谢谢!
Etag を使用して同時実行制御にオプティミスティック ロック メカニズムを実装します。次の例は、繰り返しの送信に限定されません。
同時シナリオでは、複数のクライアントが同じリソースを同時に操作すると、クライアントが操作するリソースが未知の状況で変更されるという状況が発生します。彼が書いたコメントは奇妙に見えます^_^
解決策は非常に簡単です。B が A を見たときに、投稿リソース識別タグ -1 を与えます。B がコメントを送信するとき、この識別タグ -1 と一緒に送信します。サーバーはリクエストを受け入れる前にアプリオリ条件を検証します。その時点で投稿の内容に変更がない場合は、まだタグ 1 であり、成功を意味します。post-a
,用户B看到了post-a
之后在下面写评论,在B写评论期间用户A把帖子内容改成了post-aa
。会产生的一个问题是,用户B针对post-a
渡されたパラメータからハッシュ値を生成し、データベースの hash_code フィールドに格納します。このフィールドは一意のインデックスとして使用されます。そして、データベースに挿入されるたびに、同じ方法でハッシュ値が生成され、そのハッシュ値が存在するかどうかが判断されます。