我已经为注册活动做了一个小应用程序.用户输入他们的数据并单击"登录".
现在有时人们在数据库中是双倍的,完全相同的数据相互之后非常快地插入2次.这只能意味着有人点击了按钮两次,这导致了两个帖子发生.
这是常见的网络问题,因为信用卡应用和论坛应用经常说:"点击一次就够了!".
我猜您可以通过检查完全相同的数据来查看帖子是否唯一,但我想知道是否还有其他方法.
这个过程不计入ASP.NET webforms,因为POST并不重要.
虽然JavaScript解决方案可以在单击后禁用提交按钮,但这对那些禁用了JavaScript的人没有影响.在添加之前,您应该始终在没有JavaScript的情况下正常工作,否则没有意义,因为用户仍然可以通过禁用JavaScript来绕过检查.
如果动态生成表单所在的页面,则可以添加包含某种序列号,散列或任何唯一的隐藏字段.然后,您将进行一些服务器端验证,以检查具有该唯一值的请求是否已经进入.当用户提交表单时,将根据"已使用"值列表检查唯一值.如果它存在于列表中,则它是一个欺骗请求,可以被丢弃.如果它不存在,则将其添加到列表中并正常处理.只要您确保该值是唯一的,这就保证了相同的表单无法提交两次.
当然,如果表单所在的页面不是动态生成的,那么您需要在服务器端以硬盘方式执行此操作,以检查是否尚未提交相同的信息.
到目前为止,大多数答案都是客户端的.在服务器端,您可以在第一次生成表单时生成带有GUID的隐藏字段,然后在收到帖子时将该GUID记录为提交的表单.在进行任何更多处理之前检查它.