私は明らかにどこかで何かを逃しました。
何らかの方法で、顧客は11秒の遅延(チェック時間)内に2回予約を行うことができました。私の最初のことは、ユーザーが予約を行った可能性があり、次にブラウザに戻って予約を再度行った可能性があるということでした。ただし、この動作を防ぐことがわかっている検証が少なくとも2つあるため、これは不可能です。
私に残された唯一の結論は、顧客が予約を送信しようとした場合、Webサービスが11秒以内にフリーズし、顧客がリクエストを中止して再度送信したため、これら2つの予約が同時に発生することを許可したということです。
それを除けば、何が原因なのかわかりませんでした。MySQL挿入の遅延はおそらく?
だから基本的に私が主に疑問に思うのは;
フォームが2回送信されて実行され、2番目のフォームが必要なすべての検証をバイパスする原因は何ですか?
私のフォームの現在のワークフロー
ユーザーは入力フィールドにデータを送信してから送信します。私のシステムは、これらすべての入力を検証し、両方の一意のコードをチェックして、MySQL呼び出しで2回使用されていないことを確認します。また、利用可能な座席数が、予約された座席数と同じかそれ以上であることを確認します。
この場合、同じコードが使用され、座席数が上限を超えています。
基本的に、POSTが検証されない限り、予約はMySQLに挿入されません。