¡No utilice las solicitudes GET para realizar modificaciones! Be RESTful; use POST (o PUT) en su lugar, el navegador debe advertir al usuario que no vuelva a cargar la solicitud. Redirigir (using HTTP redirection) a una página de recibo utilizando una solicitud GET normal después de una solicitud POST/PUT permitirá refrescar la página sin que se le advierta acerca de volver a enviarla.
EDIT:
que asumir el usuario está conectado de alguna manera, y por lo tanto ya fuiste tener alguna manera de rastrear al usuario, por ejemplo, sesión o similar.
Se podría hacer una marca de tiempo (o un hash aleatoria etc ..) cuando se muestra la forma de almacenarlo tanto como un campo oculto (justo al lado de la lucha contra Solicitud Cross-Site símbolo Estoy seguro de que tiene allí noté) y en una variable de sesión (que se almacena de forma segura en su servidor), cuando recibe una solicitud POST/PUT para este formulario, comprueba que la marca de tiempo sea la misma que la sesión. Si es así, estableces la marca de tiempo en la sesión en algo variable y difícil de adivinar (la marca de tiempo concatenada con alguna cadena secreta, por ejemplo) y luego puedes guardar los datos del formulario. Si alguien repite la solicitud ahora, no encontrará el mismo valor en la variable de sesión y rechazará la solicitud.
El problema al hacer esto es que el formulario no es válido si el usuario hace clic atrás para cambiar algo, y puede ser un poco duro, a menos que sea dinero lo que está actualizando. Por lo tanto, si tiene problemas con usuarios "estúpidos" que actualizan y hacen clic en el botón "Atrás" accidentalmente reenviando algo, simplemente usar POST les recuerda que no hagan eso, y redirigir lo hará menos probable. Si tiene un problema con usuarios malintencionados, también debe usar un intervalo de tiempo, aunque a veces puede confundir a los usuarios, aunque si los usuarios publican deliberadamente el mismo mensaje una y otra vez, es probable que deba encontrar una forma de prohibirlos. Usar POST, tener un timestam e incluso hacer una comparación completa de toda la base de datos para buscar publicaciones duplicadas, no servirá de nada si los usuarios maliciosos simplemente escriben un script para cargar el formulario y enviar basura al azar automáticamente. (Pero la protección de solicitud entre sitios lo hace mucho más difícil)
El OP se queja de que sus usuarios han estropeado el sistema. Decir "hacer que su navegador intente detenerlos" no es una solución sólida para el problema. –
No, pero hace que los usuarios benignos sean menos propensos a hacerlo, agregué algunas ideas para reducir aún más el problema. –