Php evita el envío repetido de formularios
Muchos de los métodos más utilizados en PHP para evitar envíos repetidos son restricciones de la base de datos. Por supuesto, algunos también pueden restringirse directamente en el cliente. Específicamente, ¿cuáles son algunos ejemplos de prevención de envíos duplicados en PHP?
Las siguientes situaciones darán lugar al envío repetido del formulario:
Haga clic en el botón Enviar dos veces.
Haz clic en el botón Actualizar.
Utilice el botón Atrás del navegador para repetir la operación anterior, provocando que el formulario se envíe repetidamente.
Utilice el historial del navegador para volver a enviar el formulario.
Solicitudes HTTP duplicadas desde el navegador.
La página web se actualizó de forma maliciosa.
Las siguientes son varias soluciones:
Una: haga clic en el botón de configuración js y se volverá gris.
& ltform nombre=form1 método=? ¿Correo? Acción=? /?target = _ en blanco & gt
& ltp & gt
& ltTipo de entrada=? ¿Palabra? nombre=? ¿T1? ¿Tamaño =? 20?& gt
& ltTipo de entrada=? ¿Botón? valor=? ¿entregar? al hacer clic=? JavaScript: {este.discapacitado = verdadero; formulario 1. enviar();& gt
& lt/p & gt;
& lt/form & gt;
Después de hacer clic en el botón, se vuelve gris y no se puede hacer clic. Si el usuario necesita enviar el formulario nuevamente, actualizará la página y completará los datos nuevamente antes de enviarlo.
Segundo: Usar sesiones
Colocar una bandera especial en la sesión. Cuando se solicita una página de formulario, se genera una cadena especial, se almacena en la sesión y se coloca en un campo oculto del formulario. Al aceptar el procesamiento de datos del formulario, verifique si la cadena de identificación existe, elimínela inmediatamente de la sesión y luego procese los datos normalmente.
Si no se encuentra ninguno válido. La cadena de bandera en el envío del formulario indica que el formulario se ha enviado y este envío será ignorado.
Esto proporciona una protección XSRF más avanzada para su aplicación web.
Cuando se carga la página enviada, se genera un número aleatorio.
$code = mt_rand(0, 1000000);
Almacenar en el cuadro de entrada oculto del formulario:
<Input type=? ¿esconder? nombre=? ¿Código? valor=? & gt
El código PHP en la página de recepción es el siguiente:
& lt? Lenguaje de programación del lado del servidor (abreviatura de Preprocesador de hipertexto profesional)
session_start().
if(isset($_POST[?Code?])) {
if($_POST[?Code?] == $_SESSION[?Code?]){ p>
p>
//Envíe el formulario repetidamente.
}En caso contrario{
$_SESSION[? ¿Código? ] =$_POST[? ¿Código? ];//Código de almacenamiento
}
}?& gt
Tercero: utilizar cookies
El principio es similar al de sesión, pero una vez que se desactivan las cookies en el navegador del usuario, esta funcionalidad deja de ser efectiva.
if(isset($_POST[?Enviar?])){
setcookie(?tempcookie?,?, tiempo()+30);
Título(? Ubicación:?.
$ _ SERVIDOR[PHP _ SELF]);salir();
}
if(isset($_COOKIE[?tempcookie?])){
setcookie(?tempcookie?,?,0); eco? ¿Has enviado el formulario? ;
}
Cuarto, utilice la función de encabezado para saltar.
Una vez que el usuario hace clic en el botón enviar, saltará a otra página después de procesar los datos.
if (isset($_POST[?Submit?])) {
Título (? Ubicación: Success.php?);//Después de procesar los datos, vaya a otras páginas .
}
Cinco: utilizar la base de datos para agregar restricciones.
El método más directo y efectivo es agregar directamente restricciones únicas o crear índices únicos en la base de datos. Una vez que el usuario envía repetidamente, se generará una advertencia o un mensaje directamente, o solo los datos enviados para la primera. Se procesará el tiempo. Esto requiere una consideración exhaustiva del diseño y la arquitectura de la base de datos inicial.
Seis: modo Publicar/Redireccionar/Obtener
Realizar la redirección de la página después del envío, que es el llamado modo Post-Redireccionamiento-Obtener (PRG). En resumen, cuando el usuario envía el formulario, realiza una redirección del lado del cliente y accede a la página de información de envío exitoso.
if (isset($_POST[?Action?])&& amp$_POST[?Action?] == ?Enviado?) {
//Procesamiento de datos, como como ir a otras páginas inmediatamente después de insertar datos.
Título (? Ubicación: envíos _ Success.php?);
}
Esto puede evitar envíos repetidos causados por usuarios que presionan F5, y no dará Al salir del navegador desde las advertencias de envío duplicado también se eliminan los mismos problemas causados al presionar hacia adelante y hacia atrás en el navegador.
;