redis - 防止表单重复提交是怎么做的?
PHP中文网
PHP中文网 2017-04-24 09:10:06
0
2
1296

关于防止表单重复提交的做法有很多,本人知道的有如下,只是简单讲讲,大家觉得什么办法最简单又有效?

1.有redis的环境
把提交的动作action,参数之类的作为redis的key,存进redis,设置一个很短的缓存时间,提交的时候判断如果存在这个key,说明是重复提交数据。

2.jquery前端判断
除了在程序端判断重复提交外,在页面前端也加一层措施,如点击提交按钮,按钮状态不可用(有的按钮用的a标签),如果不是按钮button,可以用jquery在提交的时候设置一个属性值,如果有了这个属性值,表示已经提交。

$("body").data("applycancel","unlock");

3.表单隐藏域token

生成一个随机数,放进session,给表单加一个隐藏域放进token,提交的时候判断表单的token隐藏域和session的值是否一致,如果不一致表示重复提交,处理表单的时候unset掉这个session。

各位还有什么办法,什么办法最好,谢谢!

PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(2)
小葫芦

Etag を使用して同時実行制御にオプティミスティック ロック メカニズムを実装します。次の例は、繰り返しの送信に限定されません。

同時シナリオでは、複数のクライアントが同じリソースを同時に操作すると、クライアントが操作するリソースが未知の状況で変更されるという状況が発生します。

簡単な例:

ユーザー A が次の内容の投稿を投稿しました

彼が書いたコメントは奇妙に見えます^_^post-a,用户B看到了post-a之后在下面写评论,在B写评论期间用户A把帖子内容改成了post-aa。会产生的一个问题是,用户B针对post-a

解決策は非常に簡単です。B が A を見たときに、投稿リソース識別タグ -1 を与えます。B がコメントを送信するとき、この識別タグ -1 と一緒に送信します。サーバーはリクエストを受け入れる前にアプリオリ条件を検証します。その時点で投稿の内容に変更がない場合は、まだタグ 1 であり、成功を意味します。

投稿の内容が変更された場合、新しい ID はタグ 2 であり、B によって送信されたタグ 1 と一致せず、期間中にリソースが変更されたことを示し、412 Precondition Failed が返されます。次に、ページまたはプロンプトを更新し、B にこの変更を知らせてコメントを続けます。

API の状況も同様で、返されたリソースに識別子を追加するだけです。

いいねを押す +0
伊谢尔伦

渡されたパラメータからハッシュ値を生成し、データベースの hash_code フィールドに格納します。このフィールドは一意のインデックスとして使用されます。そして、データベースに挿入されるたびに、同じ方法でハッシュ値が生成され、そのハッシュ値が存在するかどうかが判断されます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート