2009-05-19 7 views
6

exaktes Duplikat: How to handle multiple submissions server-sideVerhindern von Doppel Form Einreichungen

Die allgemeine Aufgabe in der Hand: eine doppelte Form Vorlage in einer Multi-User Web-basierte Anwendung zu verhindern. Denken Sie an finanzielle Transaktionen.

Ich habe zwei Methoden, die zusammen verwendet werden können:

  1. JavaScript Deaktivierung der Schaltfläche
    • Nachteil: funktioniert nicht, wenn JavaScript deaktiviert
  2. Verifizierung Back-end ist - sehen Sie, wie lange die letzte Anfrage dieses Typs von diesem Benutzer kam und Fehler vor nicht allzu langer Zeit ausgegeben wurde
    • Nachteil: Wenn die beiden Eingaben nahe genug beieinander sind, von denen jeder bewusst zu sein, die anderen

Ich suche Fachexperten nicht in der Lage sein, ihre besten Praktiken sowie esoterische Tricks beitragen . Kann jede Sprache und jeden Rahmen sein, aber Django ist von besonderem Interesse. Es wurde viel über die anstehende Aufgabe im Internet geschrieben, aber es wäre schön, die hier gezeigten Best Practices zu haben.

+0

Dies wurde geschlossen, aber wo sind die ähnlichen Fragen? Double-Submit-Prevention-Tag führt nicht genau dasselbe Problemszenario auf. – vsingh

Antwort

8

Die allgemeine Lösung besteht darin, jedes Mal, wenn Sie ein Formular generieren, ein Token auf dem Server zu generieren. Speichern Sie das Token auf dem Server, fügen Sie es als verborgenes Feld zum Formular hinzu und löschen Sie es, sobald Sie eine Formularübergabe mit diesem Token erhalten haben.

Wenn Sie eine Formularübergabe ohne gültiges Token erhalten, bedeutet dies, dass das Formular bereits übergeben wurde und es ignoriert.

Dies hat den zusätzlichen Vorteil, XSRF-Schutz für Ihr Projekt hinzuzufügen.