2012-03-22 15 views
6

Después de enviar un formulario, tengo 2 $ _POST variables. En la página de destino, quiero convertirlos en variables $ _SESSION y desarmar los $ _POST para que el usuario no reciba la alerta del navegador para enviar sus datos nuevamente. Este es mi código (no funciona):

if(isset($_POST['clave']) && isset($_POST['email'])){ 
    $_SESSION['id_user']=$_POST['clave']; 
    $_SESSION['email']=$_POST['email']; 
} 
if(isset($_SESSION['id_user']) && isset($_SESSION['email'])){ 
    unset($_POST['clave']); 
    unset($_POST['email']); 
    //I do my stuff here 
} 

Si me hago eco de los postes no se muestra nada pero cada vez que vuelva a cargar consigo el navegador de advertencia.

+1

¿Cuál es el * material * que usted hace? –

Respuesta

8

No puede simplemente eliminar los datos $ _POST del servidor. El navegador lo alerta porque es almacenado por el navegador. Si vuelve a enviar los datos, los enviará de vuelta al servidor y repoblar$_POST.

Lo que debe hacer es utilizar el patrón POST-REDIRECT-GET.

Procese los datos POST (por ejemplo, volcándolos en la sesión), luego envíe un navegador redirecciona y no un documento HTML. Luego, el navegador realiza una solicitud GET al servidor y usted les da la página.

+0

Gracias. Todas las otras respuestas fueron correctas pero esta me da una solución que puedo usar para resolver mi problema. ¡Aclamaciones! –

4

No es posible. Cuando el usuario accede a la recarga, la acción ANTERIOR se vuelve a hacer, que era una publicación. Aunque haya desactivado los valores POST cuando se envió el formulario por primera vez, la acción de recarga será una solicitud NUEVA. El navegador SIEMPRE le preguntará al usuario si desea volver a enviar los datos.

Para evitar esto, debe redirigir al usuario a otra página DESPUÉS de que se forme la publicación.

p. Ej.

  1. usuario CONSIGUE el formulario.
  2. usuario publica la forma
  3. servidor
  4. redirige el usuario a una nueva página
  5. usuario obtiene la nueva página
  6. accesos de usuarios recargan
  7. usuario obtiene la nueva página de nuevo - no se realiza ninguna POST.
2

Esto no funcionará porque el navegador no le advierte sobre el lado del servidor, está pidiendo confirmación de que debe realizar una acción insegura.

En la mayoría de los casos, debe utilizar el POST/Redirect/GET pattern, que no presenta este problema.

1

su una entrada antigua, pero también me enfrenté al mismo problema, así que aquí la solución fácil,

  1. crear un login.php ==> los cuales enviar dos variables a través del formulario HTML

  2. crea un getHome.php ==> que recibirá dos variables por $ _POST ['myvar']; función y poner estas dos variables publicadas en una sesión, también echo el usuario incorrecto y pase aquí si lo desea.

  3. crear un home.php ==> aquí pondrás la condición if para verificar la sesión, es decir, si (isset ($ _ SESSION ['myvar'])) {mostrar inicio} else {header ('location: login. php '); * la función de encabezado lo redirigirá para iniciar sesión.php si usted accede al archivo home.php directamente sin iniciar sesión.

its done !!

Cuestiones relacionadas