La Web del Programador: Comunidad de Programadores
 
    Pregunta:  25967 - COMO IMPEDIR AL USUARIO QUE REENVIE EL MISMO FORMULARIO
Autor:  Ander Apiztegi
Como impedir que el usuario pueda reenviar el mismo formulario cuantas veces quiera.
Esto es, tengo un formulario que envia unos datos. Despues de enviarlos con el submit
si el usuario le da a ctrl-R se vuelve a enviar el mismo fomulario otra vez. ¿Como impido eso?

  Respuesta:  Jokin Barmes
Tengo dos soluciones usando https o http:
A mi lo mejor me parece usar https porque con httpd el control se complica y es facil equivocarse en algo.

La solución es usar una variable que cambiamos de valor cuando enviamos el formulario con esto conseguimos que dandole a refrescar(o Ctrl-R) nos envie otra vez el mismo formulario. Un ejemplo:

Cuando enviamos un formulario con javascript cambiamos el valor de la variable 'enviado' de vacio a 1 entonces solo enviaremos el formulario en el caso de que 'enviado' sea vacio, esto es, solo la primera vez. Porque a partir de ese momento 'enviado' será 1 y no podremos enviar otra vez el mismo formulario.

Pero que puede pasar que el usuario le de ir hacia atras con lo que le aparecería otra vez el formulario con todos los datos completados, el usuario le da a enviar y se envian los datos porque en el historial la variable 'enviado' es vacio. Con https conseguimos que el historial se borré no permitiendo al usuario volver hacia atras.

Alguien podría decir tambíen que porque antes de enviar no cambiamos el valor de otra variable para impedir también que al dar al botón enviar pueda enviar el formulario. pues sí, pero el usuario puede volver siempre más atras. Y tendriamos que estar caducando cada página explicitamente con una variable y usando javascript, que para mi es muy pesado pero que es posible

Con https nos despreocupamos de ir caducando cada página porque no se guarda el historial además todos los datos que se envian y recogen están encriptados.