Foros del Web » Programando para Internet » PHP »

Problema al verificar el password

Estas en el tema de Problema al verificar el password en el foro de PHP en Foros del Web. Buenas a todos. Tengo un problemilla con mi codigo que funciona a la perfeccion en local, pero al subirlo al servidor el login no me ...
  #1 (permalink)  
Antiguo 02/04/2008, 13:46
 
Fecha de Ingreso: febrero-2008
Mensajes: 74
Antigüedad: 16 años, 2 meses
Puntos: 0
Pregunta Problema al verificar el password

Buenas a todos.
Tengo un problemilla con mi codigo que funciona a la perfeccion en local, pero al subirlo al servidor el login no me funciona. Probando he llegado a determinar que el problema es que no se da cuenta de que el password que pongo es igual al registrado en la base de datos.

Me explico mejor; esta es mi funcion login:

Cita:
function login($username, $password)
// comprueba username y password en la base de datos
{

// conecta a la base de datos
$conn = db_conectar();

if (!$conn)
return 0;

// comprueba el usuario
$result = mysql_query("select * from datosregistro where username='$username' and passwd = password('$password')",$conn);

if (!$result)
return 0;

$num_rows = mysql_num_rows($result);


if ($num_rows>0)
return 1;
else
return 0;
}
Comprobado mediante un "echo" las variables $username y $password y llegan a la funcion perfectamente. También he comprobado que la conexion se lleve a cabo correctamente;
El problema lo he detectado en que al hacer un echo "$num_rows Rows\n";
el resultado es "0 Rows" por lo que mi funcion de login devuelve 0.
Entonces la consulta del password no se hace correctamente ya que si quito "and passwd = password('$password')" de la consulta entra perfectamente, pero es necesario obtener el acceso introduciendo un password (logicamente).

He estado buscando y no se como ponerlo para que valide al usuario.

*PD: aclarar que al introducir los datos en la base de datos tb uso password('$password') con lo que se supone que la forma de encriptar es igual

A ver si alguien sabe cual es mi problema de que no me reconozca el pass y si no cual forma seria mas aconsejable para introducir y comprobar el password.

Muchas graciasss y saludos a FDW
  #2 (permalink)  
Antiguo 02/04/2008, 15:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Re: Problema al verificar el password

Hola bysv,

El problema que tienes es que de la versión 4.0 a 4.1 de MySQL se cambio el algoritmo de encriptación de la función PASSWORD(), ahora te devuelve un HASH de 32 caracteres, cuando antes era de 16 caracteres.

Te recomiendo dos cosas, la primera es volver a cambiar los hashes de los passwords (o sea volver a generar los usuarios para que usen el nuevo PASSWORD), o que en lugar de usar PASSWORD uses OLD_PASSWORD para que te regrese los hashes antiguos y sean comparados exitosamente en tu base de datos.

Saludos.
  #3 (permalink)  
Antiguo 02/04/2008, 17:23
 
Fecha de Ingreso: febrero-2008
Mensajes: 74
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Problema al verificar el password

Asias por tu respuesta GatorV.

Para la segunda de las cosas me ha servido para poder autentificar los datos que habian sido introducidos en la base de datos con anterioridad. Logro entrar como usuario registrado usando old_password.

Ahora he intentado incluir nuevos y luego entrar mediante el formulario y no logro entrar. Me sigue pasando lo mismo y no se porque.
Inserto asi:
Cita:
$result = mysql_query("insert into datosregistro (username,passwd) values
('$username', password('$password'))");
Y compruebo asi:

Cita:
$result = mysql_query("select * from datosregistro where username='$username' and passwd = password('$password')",$conn);
Quizas sea una chorrada, pero se me está complicando.

Muchas gracias. Saludosss.

Última edición por bysv; 02/04/2008 a las 17:44
  #4 (permalink)  
Antiguo 02/04/2008, 18:12
 
Fecha de Ingreso: febrero-2008
Mensajes: 74
Antigüedad: 16 años, 2 meses
Puntos: 0
Re: Problema al verificar el password

Uas!
Tema solucionado. Al final sabia que tenia que ser una tonteria y así ha sido. Una pena.
El limite de caracteres del password en la base de datos era menor al de el verdadero password encriptado con lo que cuando comparaba no eran iguales, por supuesto ya que el que habia grabado en la BD habia sido hecho de la misma manera, sí; pero con algun caracter menos por lo que la comparacion nunca podia ser igual.
Chorradita que me ha hecho perder un buen tiempo. pero al fin dormire trankilo por hoy, jeje.

Muchas gracias por todo, nos vemos en proximas cuestiones.
Saludosss
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:20.