[Php-avanzado] Sesiones se sobreescriben (pregunta fuera del curso)
Silverzero
silverzero.52 en gmail.com
Mie Oct 14 17:12:35 ART 2015
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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://www3.fi.mdp.edu.ar/pipermail/php-avanzado/attachments/20151014/a31462fc/attachment-0001.html>
Más información sobre la lista de distribución Php-avanzado