[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