Evitare il re-submit dei dati di un form mediante refresh

giugno 27, 2008

Durante l’implementazione di un meccanismo di inserimento dati via web, mi sono imbattuto in un problema derivante dal comportamento atipico del pulsante “Refresh” del browser Mozilla Firefox.

Per evitare il re-submit accidentale dei dati del form mediante un refresh della pagina di destinazione (quella indicata nell’attributo “action” del tag “form”), ho creato un sistema, basato sull’impostazione dell’header “Location:” che redirige il browser dalla pagina che elabora gli input a quella che conferma l’avvenuto inserimento dei dati.

Il “percorso” realizzato durante la navigazione è dunque quello che segue:

  1. form.jsp : inserimento dati
  2. dataprocess.jsp : elaborazione dati, redirige senza alcun input sulla pagina seguente
  3. confirm.jsp : pagina statica di conferma dell’avvenuta ricezione dei dati inseriti.

In questo modo, pensavo, il refresh della pagina confirm.jsp non tenterebbe il resubmit dei dati, essendo quest’ultima differente dalla pagina indicata come action su -1-.
Questo è vero per i browser IE6, Safari 3, Opera 9.5, i quali, log del web server alla mano, effettuano solamente un GET di -3-.
Firefox 3, al contrario, esegue nuovamente un POST su -2- per poi finire come da copione su -3-.

Una soluzione possibile viene dal settaggio di un cookie impostato su -1-, che deve essere letto come prima operazione su -2- ed immediatamente distrutto. La presenza del cookie testimonia che il percorso effettuato per il submit dei dati è effettivamente un POST da -1- e non un refresh da -2- o -3- che sia.

One Response to “Evitare il re-submit dei dati di un form mediante refresh”

  1. effettivamente tuo cognato ogni qualvolta mette mano ad un form inizia ad urlare: “ma perchè non me lo pubblicano, perchè non lo vedo ancora?” e schiaccia ripetutamente il tasto submit o fa refresh…
    http://emiliaromagna.indymedia.org/node/3008#comment-1314
    http://emiliaromagna.indymedia.org/node/3008#comment-1316

Leave a Reply