Http 我怎么知道一张表格被提交了两次?

Http 我怎么知道一张表格被提交了两次?,http,post,webforms,Http,Post,Webforms,是http协议中帮助我发现的内容,还是我应该自己检查字段 如果可以多次提交相同的字段值,我是否应该添加一个虚拟隐藏字段或其他内容?一种方法是,单击按钮后使用JavaScript禁用该按钮。此外,还可以生成一个服务器端代码,用于检查多个提交(或回发)。我不认为HTTP协议上有任何可用的东西,因为HTTP是无状态的,而且它本身不知道多个提交 我认为这在http中是不可能的。您可以计算字段的散列并在javascript中检查它 编辑您可以将其存储在Cookie中如果您想完全确定您需要在表单的隐藏字段中

是http协议中帮助我发现的内容,还是我应该自己检查字段


如果可以多次提交相同的字段值,我是否应该添加一个虚拟隐藏字段或其他内容?

一种方法是,单击按钮后使用JavaScript禁用该按钮。此外,还可以生成一个服务器端代码,用于检查多个提交(或回发)。我不认为HTTP协议上有任何可用的东西,因为HTTP是无状态的,而且它本身不知道多个提交

我认为这在http中是不可能的。您可以计算字段的散列并在javascript中检查它


编辑您可以将其存储在Cookie中

如果您想完全确定您需要在表单的隐藏字段中包含表单的唯一id,并对照所有服务器线程都能看到的数据存储进行检查(例如db)处理表单数据之前。

避免这种情况的一种方法是在发生回发操作后重定向到同一页面。但这将清除ViewState中存储的所有值

这是一篇关于这个主题的好文章


您可以在客户端、服务器或两者上解决问题

客户端您可以禁用提交按钮,显示一个警报框,重定向用户等-看看


服务器端您可以使用会话,并允许每个访问者只提交一次。

我通常不担心额外的加载/提交,除非数据正在保存/更改。因此,我在数据修改逻辑中设置了强大的控件。加载数据时,我返回该数据的最后更改日期和时间。保存时,我确保现有数据具有相同的最后更改日期。第二次保存/更改将中止,因为第一次保存将修改最后一次更改日期,使其不同。在初始保存(插入)的情况下,您可以添加逻辑以确保在上一次X时间内没有为用户创建新项目

感谢您的javascript想法。但是如果用户在提交帖子后重新加载页面,这将不会有帮助,是吗?好的,这时您可以编写一个小脚本来检查用户的重新加载状态。例如,您可以简单地创建一个会话变量,该变量存储会话正在查看的当前页面。我想他是在试图避免用户刷新页面时之前的回发操作。