Thomas Bandt

Über mich | Kontakt | Archiv

Wie verhindert man sicher Mehrfacheinträge in eine Datenbank?

Nachdem absenden eines Formulars validiert man dieses und trägt anschließend die vom Benutzer eingegeben Werte ein und zeigt ihm nun anstatt des Formulars eine nette Bestätigung.

Soweit so gut. Der User hat zwar nun das Formular nicht mehr vor Augen, doch ein Tastendruck auf F5 genügt, und schon werden sämtliche Formularinhalte erneut an den Server übertragen. Der Grund liegt darin, dass sich der Browser die übertragenen Formularinhalte solange merkt, bis eine neue Seite aufgerufen wird. Was für uns allerdings sehr ärgerlich sein kann, wenn der User Spaß am Drücken von F5 findet und so unter Umständen dutzende sinnloser Datensätze anlegt.

Eine wirksame Methode dagegen möchte ich heute vorstellen. Das Prinzip ist relativ simpel: nachdem das Formular abgeschickt, validiert und erfolgreich verarbeitet wurde, wird eine Session mit einem bestimmten Wert gesetzt.

Session.Contents.Add("Merksession","true");

Anschließend leiten wir den User an genau dieselbe Seite weiter, auf der er sich befindet. Der Effekt, der dabei entsteht, ist der, dass der Browser sämtliche Inhalte des Formulars "verliert" und davon ausgeht, dass man nun bereits die nächste Seite aufgerufen hat, was im Prinzip ja auch stimmt.

Auf der Seite erneut angekommen prüfen wir nun im Page_Load, ob die Session existiert und ob Ihr Inhalt dem Wert entspricht, den wir haben wollen. Wenn dem nicht so ist, dann hat der Benutzer das Formular noch gar nicht abgesendet. Falls aber doch, dann blenden wir nun die Bestätigungsmeldung ein. Wie genau, das bleibt jedem selbst überlassen.

Anschließend löschen wir die Session wieder:

Session.Contents.Remove("Merksession");

Refresht der User nun die Seite erneut, haben wir wieder den Status wie beim ersten Aufruf: kein Postback, keine Session - nichts.

Damit ist es wirklich unmöglich ein und den selben Vorgang mehrfach zu wiederholen.

 



« Zurück  |  Weiter »