Si desea evitar envíos dobles, debe almacenar el estado de "enviado" frente a "no enviado". Tiene varias opciones sobre dónde guardar esta información.
- Base de datos - Agregue un campo oculto con un valor generado automáticamente que sea único (puede generar una cadena aleatoria corta y agregar la hora actual). Este valor también se puede usar para identificar la conversación, si necesita una conversación web con estado. Agregue este valor a la base de datos y hágalo único. Desventajas:almacenamiento redundante en la base de datos, rendimiento reducido en la inserción de comentarios, tiene que generar una cadena única.
- Sesión - Agregar el mismo campo oculto con un valor generado en un asunto similar. Cuando el usuario envíe el formulario, guarde el valor en la sesión si aún no está allí. Si lo es, es una sumisión doble. Desventajas:aún necesita generar el token único.
- Navegador - (1) Agregue algo de javascript para deshabilitar el botón de enviar una vez que se haya hecho clic. (2) tienen un campo oculto que comienza con el valor 0 y se cambia a 1 cuando el usuario hace clic en el botón Enviar. Si el usuario vuelve a hacer clic en el botón, comprueba si el valor es 1 y aborta si lo es. Ventajas:no hay cadena única. Desventajas:requiere que javascript esté habilitado; es posible que necesite la cadena de todos modos para implementar conversaciones web con estado.