[Php-avanzado] Sesiones se sobreescriben (pregunta fuera del curso)

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Jue Oct 15 06:57:51 ART 2015


Tenías el register_global en On ???

Eso no se usa, por motivos de seguridad, desde hace como 8 años!!!!


Me alegra que lo hayas solucionado.
Saludos!


PD: es tu servidor de desarrollo o es un servidor de producción? Si es
de desarrollo, cambiale al php.ini para que muestre todos los errores po
pantalla poniendo el flag de errores en E_ALL | E_STRICT



El mié, 14-10-2015 a las 20:54 -0300, Silverzero escribió:
> ¡Aaaaaaaaah! tengo que agregar en el .htaccess php_flag
> register_globals off
> 
> El 14 de octubre de 2015, 8:36 p. m.,
> Silverzero<silverzero.52 en gmail.com> escribió:
>         ¡Ssssssiiiiiiiiiiiiiiiiiiiiiiiiiii! ¡Era eso!!!! ¿Pero por
>         quéeeee?
>         
>         El 14 de octubre de 2015, 5:12 p. m.,
>         Silverzero<silverzero.52 en gmail.com> escribió:
>                 Leo,
>                 
>                 
>                 Le metí print_r por todos lados y mirá lo que pasa,
>                 entre un print y el otro no hay más que unas
>                 asignaciones de variables que no son de sesión y ahí
>                 cambia, no sé cómo:
>                 
>                 
>                 include ("funciones.php"); 
>                 include ("check.php");
>                 
>                 
>                 print_r($_SESSION); //éste me devuelve los valores
>                 bien: Array ( [nombre] => Carolina [id] => 1 [email]
>                 => carolina en mail.com [pass] => contraseña)
>                 
>                 
>                 if (isset($_POST['enviar'])){ 
>                 
>                 
>                 $nom = stripslashes($_POST['nom']);
>                 $ape = stripslashes($_POST['ape']);
>                 $email = stripslashes($_POST['email_usr']);
>                 $pass = stripslashes($_POST['pass_usr']);
>                 
>                 print_r($_SESSION); // y acá ya aparece cambiado:
>                  Array ( [nombre] => Carolina [id] => 1 [email] =>
>                 diana en mail.com [pass] => otracontraseña)
>                 
>                 
>                 ¿Será que los nombres de las variables las interpreta
>                 como de sesión: $email == $_SESSION['email'] ?
>                 En ese caso ¿por qué?
>                 
>                 
>                 ¡Gracias!
>                 
>                 
>                 
>                 El 13 de octubre de 2015, 7:58 p. m.,
>                 Silverzero<silverzero.52 en gmail.com> escribió:
>                         Leo, 
>                         
>                         
>                         Solo en el index.php asigno los valores,
>                         después en ningún otro script:
>                         
>                         
>                         $_SESSION['email']=$row['email'];
>                         $_SESSION['pass']=$row['pass'];
>                         
>                         
>                         y ningún script redirige a index.php, solo la
>                         funcion de chequeo, si el logueo falla, pero
>                         destruye la sesión antes de dirigirla, así que
>                         no sé...
>                         
>                         
>                         Si no lo logro solucionar mañana, voy a tratar
>                         de ir 10 minutos antes de que empiece la
>                         clase.
>                         Si llego a ver algo más, vuelvo a escribir.
>                         
>                         
>                         ¡Gracias Leo!
>                         ¡Saludos!
>                         
>                         
>                         
>                         El 13 de octubre de 2015, 7:44 p. m., Leonardo
>                         Tadei - Pegasus Tech
>                         Supply<leonardot en pegasusnet.com.ar> escribió:
>                                 Hola Carolina,
>                                 
>                                         en tu código no se ve nada
>                                 raro...
>                                 
>                                         Hacé una búsqueda en todos los
>                                 archivos buscando $_SESSION['email'] y
>                                 buscá en dónde aparece en el lado
>                                 izquierdo de una asignación.
>                                 
>                                         Te estás pasando algo por
>                                 alto: por ejemplo, en ninguna parte
>                                 del
>                                 código que enviás se ve en dónde toman
>                                 valor $_SESSION['email'] y
>                                 $_SESSION['pass'], que es en dónde es
>                                 probable que esté el error.
>                                 
>                                         Los valores de sesión no se
>                                 cambian solos...
>                                 
>                                         Saludos!
>                                 
>                                 
>                                 PD: mañana miércoles tenemos clase de
>                                 18 a 22hs. Podés ir un rato antes
>                                 o en la pausa y lo vemos sobre el
>                                 código...
>                                 
>                                 
>                                 
>                                 El mar, 13-10-2015 a las 19:31 -0300,
>                                 Silverzero escribió:
>                                 > Hola,
>                                 >
>                                 >
>                                 > Gracias por las respuestas.
>                                 >
>                                 >
>                                 > >>>>>>>>> Sebastian:
>                                 >
>                                 >
>                                 > la tabla tiene id incremental.
>                                 >
>                                 >
>                                 > >>>>>>>>> Leo:
>                                 >
>                                 >
>                                 > En index.php (donde uno se loguea)
>                                 el formulario tiene:
>                                 >
>                                 >
>                                 > <input name="email" type="email">
>                                 >
>                                 > <input name="pass" type="password">
>                                 >
>                                 >
>                                 >  y una vez que valida crea las
>                                 variables de sesión $_SESSION['email']
>                                 > y $_SESSION['pass']
>                                 >
>                                 >
>                                 >
>                                 ========================================================
>                                 > Luego en cada script se incluye una
>                                 función de chequeo de login:
>                                 >
>                                 >
>                                 >
>                                 >
>                                 > /***** funciones.php *****/
>                                 >
>                                 >
>                                 > //el servidor tiene una versión que
>                                 no soporta mysqli
>                                 >
>                                 >
>                                 > function usr_exists($e, $p, $link){
>                                 >
>                                 > $sql="SELECT * FROM usr WHERE
>                                 email='$e' AND pass='$p';";
>                                 > $result=mysql_query($sql,$link)or
>                                 die(mysql_error());
>                                 > $cant=mysql_num_rows($result);
>                                 >
>                                 > return($cant==1)?TRUE:FALSE;
>                                 >
>                                 > }
>                                 >
>                                 >
>                                 >
>                                 >
>                                 > Que la invoco debajo de ésta, al
>                                 comienzo de cada script:
>                                 >
>                                 >
>                                 > /***** check.php *****/
>                                 >
>                                 >
>                                 >
>                                 > session_start();
>                                 >
>                                 > if (usr_exists($_SESSION['email'],
>                                 $_SESSION['pass'], $link) == FALSE)
>                                 > {
>                                 >      session_destroy();
>                                 >      header("Location:index.php")
>                                 >
>                                 > }
>                                 >
>                                 >
>                                 >
>                                 ==========================================================
>                                 > En el script donde doy de alta una
>                                 persona el formulario tiene, entre
>                                 > otros campos, los de email y
>                                 contraseña. Estos campos NO tiene los
>                                 > mismos nombres que en index.php.
>                                 >
>                                 >
>                                 > <input type="email" name="email_usr"
>                                 value="<?=$email?>">
>                                 >
>                                 > <input type="password"
>                                 name="pass_usr" value="<?=$pass?>">
>                                 >
>                                 >
>                                 >
>                                 > El action del formulario apunta al
>                                 mismo script, o sea action=""
>                                 >
>                                 >
>                                 > Entonces cuando se envía por POST lo
>                                 que tiene el script resumidamente
>                                 > es:
>                                 >
>                                 >
>                                 > include ("funciones.php");
>                                 > include ("check.php");
>                                 >
>                                 >
>                                 > if (isset($_POST['enviar'])){
>                                 >
>                                 >
>                                 >
>                                 >     $email = $_POST['email_usr'];
>                                 >   $pass = $_POST['pass_usr'];
>                                 >
>                                 >
>                                 >     //chequeo si no es un email
>                                 existente y si no es inserto en la DB
>                                 >
>                                 >
>                                 >     $sql="INSERT INTO usr SET
>                                 email='$email', pass='$pass';";
>                                 >   $result=mysql_query($sql,$link)or
>                                 die(mysql_error());
>                                 >
>                                 >
>                                 >     if ($result){
>                                 > $_SESSION['output'] = "El
>                                 telemarketer se ha agregado
>                                 exitosamente.";
>                                 > header ('Location:
>                                 telemarketers.php');
>                                 >    }
>                                 >
>                                 >
>                                 >
>                                 ============================================================
>                                 >
>                                 >
>                                 > En telemarketers.php se muestra el
>                                 listado de los que hay dados de
>                                 > alta y ahi tengo un
>                                 print_r($_SESSION) que me muestra que
>                                 las
>                                 > $_SESSION['email'] y
>                                 $_SESSION['pass'] son reemplazadas por
>                                 las que
>                                 > acabo de dar de alta. Obviamente, no
>                                 me cierra la sesión porque a
>                                 > pesar que no es mi logueo, sigue
>                                 siendo un logueo valido.
>                                 >
>                                 >
>                                 > En este script tengo resumidamente:
>                                 >
>                                 >
>                                 > include ("funciones.php");
>                                 > include ("check.php");
>                                 >
>                                 >
>                                 > print_r ($_SESSION);
>                                 >
>                                 >
>                                 >
>                                 >
>                                 >
>                                 > if (isset($_SESSION['output'])){
>                                 >
>                                 >
>                                 > print $_SESSION['output'];
>                                 > unset ($_SESSION['output']);
>                                 > }
>                                 >
>                                 >
>                                 > Y luego una llamada a la DB para
>                                 listar los telemarketers.
>                                 >
>                                 >
>                                 >
>                                 ==========================================================
>                                 >
>                                 >
>                                 > Espero que se entienda.
>                                 > ¡Muchas gracias!
>                                 >
>                                 >
>                                 >
>                                 > El 13 de octubre de 2015, 5:45 p.
>                                 m., Leonardo Tadei - Pegasus Tech
>                                 > Supply<leonardot en pegasusnet.com.ar>
>                                 escribió:
>                                 >         Hola Carolina,
>                                 >
>                                 >         El mar, 13-10-2015 a las
>                                 15:35 -0300, Silverzero escribió:
>                                 >         > Hola,
>                                 >         >
>                                 >         >
>                                 >         > Sé que esto es una
>                                 consulta fuera del curso actual, pero
>                                 >         quería ver si
>                                 >         > alguien me puede dar una
>                                 pista porque no encuentro las
>                                 >         palabras clave
>                                 >         > justas para que google me
>                                 encuentre la respuesta que busco.
>                                 >
>                                 >                 La idea de la lista
>                                 es usarla. Las preguntas de los
>                                 >         egresados son muy
>                                 >         enriquecedoras, porque
>                                 suelen ser de situaciones reales.
>                                 >
>                                 >         > Tengo un sistema donde me
>                                 logueo y una vez dentro, entre
>                                 >         otras cosas,
>                                 >         > puedo dar de alta nuevas
>                                 personas para que se puedan loguear
>                                 >         como yo.
>                                 >         >
>                                 >         >
>                                 >         > El tema es que cuando la
>                                 doy de alta con email y contraseña,
>                                 >         me
>                                 >         > sobreescribe mis variables
>                                 de sesión con esos datos. El
>                                 >         script sólo
>                                 >         > inserta los datos en la
>                                 DB, no hace nada con variables
>                                 >         sesion, y los
>                                 >         > inputs del formulario
>                                 tiene otros nombres diferentes a las
>                                 >         variables
>                                 >         > de sesion. ¿A alguien le
>                                 pasó algo parecido? ¡No sé qué se
>                                 >         me está
>                                 >         > pasando por alto!
>                                 >
>                                 >                 Sin ver el código es
>                                 difícil diagnosticar, pero es de
>                                 >         suponer que al
>                                 >         principio de cada script
>                                 estás incluyendo el código que valida
>                                 >         al
>                                 >         usuario o a la sesión.
>                                 >                 Este código debería
>                                 tener una lógica tal que, si el
>                                 >         usuario está
>                                 >         ingresando, lo loguea
>                                 tomando los los datos de los INPUTs, y
>                                 >         sino lo
>                                 >         valida contra los datos de
>                                 la sesión (más o menos como vimos
>                                 >         en el
>                                 >         curso)
>                                 >                 Entonces, si al dar
>                                 de alta un usuario nuevo los INPUT
>                                 >         se llaman igual
>                                 >         que los de la pantalla de
>                                 login, y si la evaluación de los
>                                 >         input se
>                                 >         ejecuta primero que la
>                                 sesión, lo que te está pasando es que
>                                 >         para el
>                                 >         script de auntentificación
>                                 los datos de alta de un usuario
>                                 >         pasan por un
>                                 >         nuevo login, con lo que se
>                                 te actualizan las variables de
>                                 >         sesión y
>                                 >         quedás logueada como el
>                                 usuario recién creado.
>                                 >
>                                 >                 Si esto es así,
>                                 bastarían con que los nombres de los
>                                 >         INPUT de los
>                                 >         usuarios nuevos sean
>                                 distintos de los de la pantalla de
>                                 inicio
>                                 >         de
>                                 >         sesión...
>                                 >
>                                 >         > Lo que noto es que el
>                                 navegador me rellena automáticamente
>                                 >         los campos
>                                 >         > de email y contraseña con
>                                 los míos de sesion, sospecho que
>                                 >         puede venir
>                                 >         > por ahí...¿puede ser que
>                                 el navegador me los cambie
>                                 >         asumiendo que
>                                 >         > estoy cambiando los datos
>                                 de mi propio logueo a pesar de que
>                                 >         los
>                                 >         > inputs tengan nombres
>                                 diferentes a las variables de sesion?
>                                 >         ¿Será por
>                                 >         > el input type email /
>                                 password? Probé en varios navegadores
>                                 >         y en todos
>                                 >         > sucede lo mismo.
>                                 >
>                                 >                 No, no puede ser.
>                                 >                 El navegador
>                                 completa datos guardados
>                                 automáticamente
>                                 >         si son del mismo
>                                 >         dominio y se llaman igual
>                                 que los guardados.
>                                 >                 Pero que el
>                                 navegador los complete no implica que
>                                 se
>                                 >         envíen y además es
>                                 >         imposible para el navegador
>                                 cambiar datos de una sesión si no
>                                 >         envía
>                                 >         datos.
>                                 >
>                                 >
>                                 >         > ¡Saludos!
>                                 >         > ¡Gracias!
>                                 >
>                                 >
>                                 >                 Por nada.
>                                 >                 Después contanos!
>                                 >
>                                 >         --
>                                 >         Leonardo Tadei
>                                 >         leonardot en pegasusnet.com.ar
>                                 >         Web:
>                                 http://leonardo.tadei.com.ar
>                                 >         Firma pública:
>                                 >
>                                  http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>                                 >
>                                 >
>                                  _______________________________________________
>                                 >         Lista de correo:
>                                 Php-avanzado
>                                 >         Mensajes a la lista:
>                                 Php-avanzado en pato2.fi.mdp.edu.ar
>                                 >         Administración Web:
>                                 >
>                                  http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                                 >         Desubscripción:
>                                 >
>                                  php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
>                                 >
>                                 >
>                                 >
>                                 >
>                                 >
>                                 > --
>                                 > Carolina
>                                 >
>                                 _______________________________________________
>                                 > Lista de correo: Php-avanzado
>                                 > Mensajes a la lista:
>                                 Php-avanzado en pato2.fi.mdp.edu.ar
>                                 > Administración Web:
>                                 http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                                 > Desubscripción:
>                                 php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
>                                 
>                                 --
>                                 
>                                 
>                                 Leonardo Tadei
>                                 leonardot en pegasusnet.com.ar
>                                 Pegasus Tech Supply
>                                 Tel: (+54)(+223) 471-2880
>                                 La Salle 1131 - Mar del Plata -
>                                 Argentina
>                                 http://www.pegasusnet.com.ar
>                                 http://www.grupopegasus.com
>                                 Firma pública:
>                                 http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>                                 
>                                 _______________________________________________
>                                 Lista de correo: Php-avanzado
>                                 Mensajes a la lista:
>                                 Php-avanzado en pato2.fi.mdp.edu.ar
>                                 Administración Web:
>                                 http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>                                 Desubscripción:
>                                 php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
>                                 
>                         
>                         
>                         
>                         
>                         -- 
>                         Carolina
>                 
>                 
>                 
>                 
>                 -- 
>                 Carolina
>         
>         
>         
>         
>         -- 
>         Carolina
> 
> 
> 
> 
> -- 
> Carolina
> _______________________________________________
> Lista de correo: Php-avanzado
> Mensajes a la lista: Php-avanzado en pato2.fi.mdp.edu.ar
> Administración Web: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> Desubscripción: php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe

-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
Web: http://leonardo.tadei.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado