server side - side - Cómo manejar envíos múltiples desde el servidor
server side rendering vue (6)
Estoy teniendo un problema similar. Después de leer esto, creo que una ficha podría ser el camino a seguir. Esta publicación muestra un buen ejemplo de implementación.
Todos conocemos el viejo truco de "deshabilitar el botón de enviar", pero ¿cuáles son las mejores formas de manejar envíos múltiples desde el lado del servidor? Tengo una aplicación donde es absolutamente crítico que un formulario solo se envíe una vez: procesa una tarjeta de crédito. No escribí cómo es ahora, pero como una solución rápida lancé la técnica de desactivar en el envío, sin embargo, algunos usuarios impacientes que tienen javascript deshabilitado todavía se cargan dos veces.
Entonces, ¿cuáles son las formas de evitar esto? Puedo pensar en algunos, he usado algunos en el pasado, pero me gustaría ver si hay alguna "mejores prácticas" sobre cómo abordar este. Estoy usando PHP, pero estoy más interesado en los conceptos.
editar: conozco la técnica del token y es lo que he usado en el pasado, esta pregunta es más o menos para ver si mi enfoque está en línea con lo que usan los demás programadores.
Incluye un token único aleatorio en un campo de formulario oculto. Luego en el back-end, puede verificar si ha sido enviado antes.
Esta es generalmente una buena idea porque también te ayuda a defenderte contra los ataques XSS.
No confiaría en nada del lado del cliente para esto. ¿Por qué no generar una identificación única para esta transacción en el servidor antes de presentar al cliente el botón de envío? El cliente debe enviar este token nuevamente, y usted verifica que cada token se envíe una vez.
El token puede, como dicen otras personas, ser un entero creciente (+ nombre de usuario) o un GUID.
No es necesario generar tokens únicos y todo ese jazz. Después de la validación de la forma, simplemente redirija al visitante a otra página que diga algo así como "Su tarjeta de crédito está siendo procesada". Si el visitante vuelve a cargar la página, está recargando la página redirigida, no el envío POST.
También puede probar simplemente si se ha realizado una transacción idéntica en el último minuto (o segundo, dependiendo de la latencia de su servidor). La mayoría de las personas no compra dos libros idénticos (o lo que sea) dentro de un minuto el uno del otro con la misma tarjeta. Si mantiene un caché de pagos con tarjeta de crédito en el último minuto y verifica si el que está a punto de hacer es idéntico (el mismo número de tarjeta, la misma cantidad) al que acaba de hacer, es probable que vea el duplicado .
Una forma realmente efectiva es enviar un token junto con la solicitud y mantener una lista de tokens usados. Si el token no es válido o el token ya ha sido procesado, entonces aborta.
El token puede ser tan simple como un número entero creciente, almacenado en un campo de texto oculto, o puede encriptarlo para aumentar la seguridad. Esta característica se puede hacer más robusta al generar el token cuando se crea la página, al encriptarlo, luego confirmar que el token se ha generado Y no se ha procesado.