一个表单可以执行两次吗


Can a form execution occur twice?

我显然在某个地方错过了一些东西。

在某种程度上,客户在11秒内(检查时间)成功预订了两次。我的第一个想法是,用户可能已经完成了预订,然后在浏览器中后退,再次完成预订。然而,这是不可能的,因为我至少有两次验证,我知道这会阻止这种行为。

留给我的唯一结论是,如果客户试图提交预订,我们的网络服务不知何故在11秒内冻结,客户放弃了请求并再次提交,因此允许这两个预订同时发生。

除此之外,我不知道是什么原因导致的。MySQL插入延迟?

所以基本上,我最想知道的是
是什么导致表单被提交并执行两次,而第二次绕过了所有必需的验证

我的表单的当前工作流

用户提交输入字段中的数据,然后提交这些数据。我的系统验证所有这些输入,并检查这两个输入是否都是唯一的代码,以确保它不会通过MySQL调用使用两次。它还确保可用的座位数量等于或大于预订的座位数量。

在上述情况下,使用了相同的代码,并且座椅超过了允许的扩展限制。

基本上,除非POST经过验证,否则预订不会插入MySQL。

我的系统验证所有这些输入,并检查代码,以确保它不会通过MySQL调用使用两次。

听起来您有并发问题。检查/插入时你把桌子锁上了吗?

理论上,如果两次执行同时发生,它们都将有一个唯一的ID,并且在座位限制内,因此两次插入都将被允许进行(从而成功)。

以下是我思考的图解方式:

POST 1                  POST 2
Unique ID: 1234         Unique ID: 1234
Check if ID is present  Check if ID is present
ID is not present       ID is not present
Check if seats left     Check if seats left
Make insert             Make insert

第二个make POST 2不应该被允许开始它的唯一ID检查,直到表被解锁,即POST 1已经完成了它的插入。

用户本可以刷新处理表单的页面,从而发送两次POST信息?您的验证位于何处,如果它只是阻止了表单的显示,而不是处理,那么这可能是一种可能性?