Foros del Web » Programando para Internet » PHP »

problema sesiones

Estas en el tema de problema sesiones en el foro de PHP en Foros del Web. tengo este codigo: session.php session_start(); // Se destruye cualquier session_unset(); // session anterior antes de session_destroy(); // comenzar con el scrip. Esto es opcional if($_POST){ ...
  #1 (permalink)  
Antiguo 18/10/2006, 08:08
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
problema sesiones

tengo este codigo:

session.php

session_start(); // Se destruye cualquier
session_unset(); // session anterior antes de
session_destroy(); // comenzar con el scrip. Esto es opcional

if($_POST){ /// Se comrpueba si $_POST tiene algun valor
/// Valores enviados por POST ///////////////////////////////////////
$nick = $_POST['nick']; // pasamos $_POST['nick'] a $nick
$pass = md5($_POST['pass']); // pasamos $_POST['pass'] a $pass codificado en MD5 que es como estan guardadas la pass en la BD.
/////////////////////////////////////////////////////////////////////
unset($_POST); /// Se destruye el array $_POST que ya no lo necesitamos
/////////////////////////////////////////////////////////////////////
if(eregi("^[-_A-Z0-9]{3,20}$",$nick)){ // Se comprueba si el nick es valido. ( Valido: entre 3 y 20 caracteres que sean '-', '_', de la 'A' a la 'Z' y 0 al 9 )
/// SQL ////////////////////////////////////////////////////////////////////
include("sql.php"); // Conexion a la BD.
/// Buscamos el registro en la BD que conincida con $nick. Solo buscamos un registro, por eso LIMIT 1
$resp = mysql_query("SELECT id_usuario,nick,pass,intentos FROM usuarios WHERE nick='$nick' LIMIT 1",$conexion);
////////////////////////////////////////////////////////////////////////////
if(mysql_num_rows($resp) == 1){ /// Se comprueba si dio un resultado
/// Si da un resultado es que existe tal usuario ...
$row = mysql_fetch_assoc($resp); /// ... guardamos los valores del registro en la variable $row
if($row['intentos'] < 5){ /// Ahora comprobamos si tiene menos de 5 intentos fallidos de conexion.
/// En el caso de tener menos de 5 intentos, se comprueba si la contraseña es correcta
if($pass == $row['pass']){
/// Si la contraseña es correcta ...
session_start(); /// Se inicia la session
$_SESSION['id_usuario'] = $row['id_usuario']; /// Variable de session que contiene la ID del usuario, ideal para autorizar a zonas restringidas
$_SESSION['usuario'] = $row['nick']; /// Variable de session que contiene el nombre del usuario

/// Ahora actualizamos el registro del usuario, con la fecha de la ultima conexion y la ultima ip,
/// ademas sumamos en +1 las conexiones que lleva el usuario en total desde su resgitro y ponemos los intentos fallidos a 0
$fecha = time(); // fecha en formato timestamp.
$ip = "xxx.xxx.xxx.xxx"; /// Ip del usuario, esto en si no vale de nada es un hueco para poner
/// una funcion que obtenga la ip mas adelante cuando haga la funcion, pero mientras tengo que usar un IP
/// SQL ///////////////////////////////////////////////////////////
mysql_query("UPDATE usuarios SET uconexion_fecha='$fecha', uconexion_ip='$ip' , conexiones=conexiones+1, intentos=0 WHERE id_usuario='$row[id_usuario]' LIMIT 1",$conexion);
///////////////////////////////////////////////////////////////////
header("Location: ../index.php"); /// una vez logueado redirigimos al usuario al index de la pagina o a su panel de control.

} else {
/// Si la contraseña es incorrecta le sumamamos a los intentos +1
/// SQL ///////////////////////////////////////////////////////////
mysql_query("UPDATE usuarios SET intentos=intentos+1 WHERE id_usuario='$row[id_usuario]' LIMIT 1",$conexion);
///////////////////////////////////////////////////////////////////
echo "Cotraseña incorrecta.";
}
} else { echo "Cuenta bloqueada ..."; } /// Salida para cuando supere los intentos de conexion fallidos
} else { echo "No existe tal usuario."; } /// Salida para cuendo no encuentre ningun usuario en la bd con el $nick enviado
} else { echo "nick no valido"; } /// Salida para cuendo el nick introducido en el formulario no sea valido
} else { header("Location: ../index.php"); } /// Salida para cuando no se envie nada por $_POST, osea que se acceda al script directamente sin usar el formulario.




login.htm

<body>
<form name="form1" method="post" action="session.php">
<pre>


Nick: <input name="nick" type="text" id="nick">
<p>Password: <input name="pass" type="password" id="pass">

<input type="submit" name="Submit" value="Iniciar">
</pre>
</p>
</form>
</body>
</html>


Me dice que el password no es valido, podrian decirme que error estoy cometiendo por favor...
  #2 (permalink)  
Antiguo 18/10/2006, 08:18
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si te dice que el "password no es válido" en principio tu problema no sería con sesiones.

Tu validación de la contraseña la haces en:
if($pass == $row['pass']){

Pero ese dato del "pass" sale de tu consulta SQL que ejecutas en:
$resp = mysql_query("SELECT id_usuario,nick,pass,intentos FROM usuarios WHERE nick='$nick' LIMIT 1",$conexion);

y luego obienes sus resultados en:
$row = mysql_fetch_assoc($resp);

Revisa que tus contraseñas respeten mayusculas y minusculas tal cual las creastes .. revisa que los valores se correspondan exactamente. (No se vé el código donde creas a tus registros de usuarios, supongo que los almacenaras como MD5() ..?)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 18/10/2006, 08:22
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
MD5?? no entender eso, solo lo cree en el phpmyadmin y despues de eso pensaba crear una pagina de registro...
  #4 (permalink)  
Antiguo 18/10/2006, 08:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues ahí está tu problema ..

Fijate en tu código (que no sé si entiendes aunque está claramente comentado) .. La contraseña la gestiona codificada con la función MD5()

Si tu creas esa contraseña de ese usuario directamente como registro sobre tu BBDD debes aplicar MD5 al dato de la contraseña .. ¿o como tienes ahora el dato de tu contraseña de tus usuarios en tu BBDD .. lo ves en texto plano o codificado tipo: 897a9sdf87987asdf897?

En phpMyadmin puedes (si mal no recuerdo) aplicar esa función al dato que ingresas .. es decir, tu lo escribes en "texto plano" .. seleccionas MD5 (función a aplicar) y quedará registrado como MD5.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 18/10/2006, 08:34
Avatar de hulray  
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 17 años, 7 meses
Puntos: 3
muchas gracias cluster, tenias razon, ese era el problema :)
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 08:12.