index.php
Código PHP:
Ver original
<?php /* Curiosidad que me rompió la cabeza con PHP, formularios y Firefox */ { echo "Entro a mostrar el formulario<br />"; $_SESSION['tipo'] = $_GET['tipo']; echo "<form action='index.php' id='altaimagen' name='altaimagen' method='post' enctype='multipart/form-data' accept-charset='UTF-8'> <input type='text' name='nombre' /> <input type='submit' value='Enviar!' /> </form>"; } else { echo "Entro a PROCESAR el formulario<br /> Se supone que si le doy F5 y [Reenviar] al navegador, vuelve a enviar los datos y la variable de sesión tipo no deberia cambiar porque ya fue asignada<br />"; echo "Tipo: {$_SESSION['tipo']} <br />"; } ?>
¿Y cual es el problema? Si uno entra a index.php con index.php?tipo=1, le muestra el form, lo envía y al procesar imprime "Tipo: 1", hasta ahí todo lo esperado, ¡PERO! si le doy F5 para recargar la página y me pide volver a enviar el formulario, a lo que aceptamos, ¡aparece la magia! resulta que desaparece la variable de $_SESSION['tipo'] y de hecho no existe, var_dump devuelve NULL. Ahora prueben el mismo código en Chrome o en el fatídico IE y verán que al darle F5 la variable de sesión $tipo, como es lógico aún existe con el valor que pasamos en el query string al principio.
¡Pero es una locura! Porque hasta donde sé de PHP, yo no pasé por referencia a $_SESION['tipo'] el valor de $_GET['tipo'], lo asigné por valor, no por referencia, por lo tanto $_SESSION['tipo'] ¿no debería mantener siempre el valor que yo le asigno hasta que asigne lo contrario?.
Además la variables de sesión están en el servidor, entonces ¿cómo puede ser que dependiendo del navegador que use mi variable de sesión tiene un valor distinto al darle F5 y reenviar el form?????
Evidentemente supongo que Firefox 4 está enviando el form de una manera distinta a como lo hace IE y Chrome.... pero de todas formas ¿¡cómo va a cambiar mi variable de sesión que está en el lado del servidor!?
El ejemplo lo subí a sigmax.com.ar/test/index.php?tipo=1
Ahora bien, si yo pongo $_SESSION['tipo'] = 1 por ejemplo, es decir le asigno un integer, no hay problema, al darle F5 en Firefox 4 y reenviar el form la variable de sesion tipo mantiene su valor 1, por lo que supuse que fuera un problema con la asignacion $_SESSION['tipo'] = $_GET['tipo'] pero al ver que funciona en Chrome e IE como se espera el problema pasaría por Firefox, pero nuevamente ¿qué tiene que ver el navegador con variables de sesión?.....