当前位置:  开发笔记 > 编程语言 > 正文

防止双重HTTP POST

如何解决《防止双重HTTPPOST》经验,为你挑选了2个好方法。

我已经为注册活动做了一个小应用程序.用户输入他们的数据并单击"登录".

现在有时人们在数据库中是双倍的,完全相同的数据相互之后非常快地插入2次.这只能意味着有人点击了按钮两次,这导致了两个帖子发生.

这是常见的网络问题,因为信用卡应用和论坛应用经常说:"点击一次就够了!".

我猜您可以通过检查完全相同的数据来查看帖子是否唯一,但我想知道是否还有其他方法.

这个过程不计入ASP.NET webforms,因为POST并不重要.



1> Rich Adams..:

虽然JavaScript解决方案可以在单击后禁用提交按钮,但这对那些禁用了JavaScript的人没有影响.在添加之前,您应该始终在没有JavaScript的情况下正常工作,否则没有意义,因为用户仍然可以通过禁用JavaScript来绕过检查.

如果动态生成表单所在的页面,则可以添加包含某种序列号,散列或任何唯一的隐藏字段.然后,您将进行一些服务器端验证,以检查具有该唯一值的请求是否已经进入.当用户提交表单时,将根据"已使用"值列表检查唯一值.如果它存在于列表中,则它是一个欺骗请求,可以被丢弃.如果它不存在,则将其添加到列表中并正常处理.只要您确保该值是唯一的,这就保证了相同的表单无法提交两次.

当然,如果表单所在的页面不是动态生成的,那么您需要在服务器端以硬盘方式执行此操作,以检查是否尚未提交相同的信息.


你解决问题的方法很好.但是客户可以查看隐藏的字段,并且可以由他编辑以破坏我们的应用程序,这可能会再次接受双重形式.我正在寻找一个完全面向服务器的解决方案.

2> Jon Skeet..:

到目前为止,大多数答案都是客户端的.在服务器端,您可以在第一次生成表单时生成带有GUID的隐藏字段,然后在收到帖子时将该GUID记录为提交的表单.在进行任何更多处理之前检查它.


(实际上,只是想添加我个人更喜欢将该键放在查询字符串而不是创建隐藏字段)
推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有