Ein häufiges Web-Problem besteht darin, dass ein Benutzer die Schaltfläche "Submit" eines Formulars mehrfach anklickt, so dass der Server das Formular mehr als einmal verarbeitet. Dies kann auch passieren, wenn ein Benutzer auf die Schaltfläche "Zurück" klickt, nachdem er ein Formular abgeschickt hat, so dass es erneut verarbeitet wird.
Wie lässt sich dies in ASP.NET MVC am besten verhindern?
Die Möglichkeiten, die ich sehe, sind:
- Deaktivieren Sie die Schaltfläche nach dem Absenden - so umgehen Sie zwar die Mehrfachklicks, nicht aber die Navigation
- Lassen Sie die empfangende Aktion sofort umleiten - die Browser scheinen diese Umleitungen nicht im Verlauf zu speichern.
- Platzieren Sie ein eindeutiges Token in der Sitzung und im Formular - wenn sie übereinstimmen, verarbeiten Sie das Formular - wenn nicht, löschen Sie das Formular für ein erneutes Absenden.
Gibt es noch mehr?
Gibt es spezielle Umsetzungen für eine dieser Möglichkeiten?
Ich kann mir vorstellen, dass die dritte Option als ActionFilter mit einer HtmlHelper-Erweiterung in ähnlicher Weise wie bei der Fälschungssicherheit implementiert wird.
Ich freue mich darauf, von euch MVC'lern da draußen zu hören.