Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/03/2008, 08:21
Avatar de hulray
hulray
 
Fecha de Ingreso: septiembre-2006
Mensajes: 630
Antigüedad: 18 años, 2 meses
Puntos: 3
Re: Limitar el numero de intentos para acceder

Ve si te sirve este, saludos

Código 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("conexion.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,nivel,direccion,mail,celular,telefono,fax 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
                    
$_SESSION['usuario_nivel'] = $row['nivel'];
                    
                    
/// 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 "Contraseñ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 "Usuario no valido"; } /// Salida para cuendo el nick introducido en el formulario no sea valido
} else { header("Location: /principal.html"); } /// Salida para cuando no se envie nada por $_POST, osea que se acceda al script directamente sin usar el formulario.  


?>