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

Silverzero silverzero.52 en gmail.com
Mie Oct 14 20:54:26 ART 2015


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


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