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