2009-05-19 8 views
6

esatta Duplicate: How to handle multiple submissions server-sideevitare la doppia forma osservazioni

Il compito generale a portata di mano: prevenire un doppio invio di form in un'applicazione multi-utente web based. Pensa alle transazioni finanziarie.

Ho due metodi che possono essere utilizzati in tandem:

  1. JavaScript disabilitazione del pulsante
    • Svantaggi: non funziona se JavaScript è disabilitato
  2. back-end verfication - vedere quanto tempo fa l'ultima richiesta di questo tipo proviene da questo utente e genera un errore se non troppo tempo fa
    • Svantaggio: Se i due mezzi sono abbastanza vicino insieme, ognuno potrebbe non essere in grado di essere a conoscenza degli altri

Cerco esperti in materia per contribuire le loro migliori pratiche, nonché trucchi esoterici . Può essere qualsiasi lingua e struttura, ma Django è di interesse specifico. Molto è stato scritto sul web riguardo al compito in questione, ma sarebbe bello avere le migliori pratiche mostrate qui.

+0

Questo è stato chiuso ma dove sono le domande simili? il tag double-submit-prevention non mostra esattamente lo stesso scenario problematico. – vsingh

risposta

8

La soluzione comune è generare un token sul server ogni volta che si genera un modulo. Archivia il token sul server, aggiungilo come campo nascosto al modulo ed eliminalo una volta ricevuto l'invio di un modulo con quel token.

Se si riceve una richiesta di modulo senza un token valido, significa che il modulo è già stato inviato e ignorato.

Questo ha il vantaggio aggiunto di aggiungere la protezione XSRF al progetto.