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

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Mar Oct 13 19:44:26 ART 2015


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



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