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

Silverzero silverzero.52 en gmail.com
Mie Oct 14 20:36:07 ART 2015


¡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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://www3.fi.mdp.edu.ar/pipermail/php-avanzado/attachments/20151014/6b42ef15/attachment-0001.html>


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