[Php-avanzado] Sesiones se sobreescriben (pregunta fuera del curso)
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Jue Oct 15 06:57:51 ART 2015
Tenías el register_global en On ???
Eso no se usa, por motivos de seguridad, desde hace como 8 años!!!!
Me alegra que lo hayas solucionado.
Saludos!
PD: es tu servidor de desarrollo o es un servidor de producción? Si es
de desarrollo, cambiale al php.ini para que muestre todos los errores po
pantalla poniendo el flag de errores en E_ALL | E_STRICT
El mié, 14-10-2015 a las 20:54 -0300, Silverzero escribió:
> ¡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
> _______________________________________________
> 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
Web: http://leonardo.tadei.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
Más información sobre la lista de distribución Php-avanzado