Ver Mensaje Individual
  #1 (permalink)  
Antiguo 09/01/2012, 06:47
Avatar de loncho_rojas
loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Bloquear usuario por un tiempo determinado luego de intentos fallidos

Buenas.. como dice el titulo... he desarrollado y aggiornado codigos para el login de usuarios cuya fuente adjunto mas abajo..

Hace todo bien, pero no se me ocurre como hacer para bloquear a un usuario luego de 5 intentos fallidos... ya he logrado contabilizar los intentos fallidos, pero quisiera que cuando el limite llegue a 5, no se vuelva a habilitar la opcion de logueo para ese usuario por 24hs a partir de la fecha del ultimo intento fallido.

En mi tabla existen un campo INTENTOS, otro campo ULTIMAVISITA (timestamp) y un campo ULTIMOINTENTO (timestamp)... por favor si alguien me ayuda para lograr bloquear por 24hs o X tiempo a un usuario segun lo guardado en la BD.

Puede modificar lo que quieran del codigo.. ah.. si bien trabajo con Postgres, solo se cambian las funciones de pg_query por mysql_query, asi que es igual:

Aqui mi codigo funcionando a medias con ese pequeño detalle:
Código PHP:

<?php    
        
if($_POST){
            
            
$email $_POST["username"];
            
$clave $_POST["password"];
            
$fechadate("d/m/y H:i a");
            unset(
$_POST); //Se destruye el array $_POST
            
            
if(preg_match("/^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$/"$email)){
                
                
$sql_login="SELECT * FROM usuarios WHERE email LIKE '".$email."'";        
                
$resultado_login=pg_query($sql_login)or die("Error query ".pg_last_error());
                
                if(
pg_num_rows($resultado_login) == 1){
                    
                    
$fila_usuario=pg_fetch_array($resultado_loginnullPGSQL_ASSOC);
                    
                     if(
$fila_usuario['intentos'] < 5){
                         
                         if(
$fila_usuario['pass']== $clave){
                             
                                 
//validamos si la cuenta ya esta verificada 
                                
if($fila_usuario["verificacion"]=="si")
                                {
                                    
                                    
session_start();
                                    
$_SESSION["k_username"] = $fila_usuario["nombres"].", ".$fila_usuario["apellidos"];
                                    
$_SESSION["k_idcliente"] = $fila_usuario["idcliente"];
                                    
                                    
                                    
                                    
pg_query($conn2"UPDATE usuarios SET ultimavisita='".$fecha."', intentos='0' WHERE idcliente=".$fila_usuario['idcliente'])or die("Error query ".pg_last_error());
                                    
                                    
header("Location: ../clients/principal-clients.php");
            
                                }
//caso contrario, tiramos un mensaje de que aun no ha sido verificada la cuenta
                                
else
                                {
                                    echo 
"<h1>Su cuenta aun no ha sido verificada.</h1>";
                                    echo 
"<p>Si ya se ha registrado desde nuestro sitio Web:</p>";
                                    echo 
"<ul>
                                            <li>Por favor, revise su correo electrónico.</li>
                                            <li>Siga las instrucciones que le hemos enviado.</li>
                                            <li>Inicie Sesi&oacute;n.</li>
                                          </ul>"
;
                                    echo 
"<p>Caso contrario, puede <a href='registro.php'>registrarse</a> para acceder a los servicios</p>";
                                }
                             
                         
                         }else{
                             
pg_query($conn2"UPDATE usuarios SET ultimointento='".$fecha."', intentos=intentos+1 WHERE idcliente=".$fila_usuario['idcliente'])or die("Error query ".pg_last_error());
                             
                             echo 
"<p style='font-size:14px; color:#FF0000;'>El password no es valido!!</p>";
                             
                             
                             
$cn pg_query("SELECT intentos FROM usuarios WHERE idcliente=".$fila_usuario['idcliente'])or die("Error query ".pg_last_error());
                             
$rspg_fetch_array($cn);
                            
                             echo 
"<p>Recuerde que s&oacute;lo posee <strong>5 intentos</strong> para ingresar a su cuenta correctamente.</p>";
                             echo 
"<p>Este es su intento N&deg;: <span style='font-size:15px;'>".$rs['intentos']."</span></p>";
                             
                         }
                         
                         
                         
                         
                     }else{
                         echo 
"<p style='font-size:14px; color:#FF0000;'>Ha sobre pasado el limite de 5 intentos. <br />La cuenta sera bloqueada automaticamente por 24hs.</p>";
                     }
                     
                     
                    
                }else{
                    echo 
"<p>La direccion de email ingresada no esta registrada</p>";
                }
                
                
            
            }else{
                echo 
"<p>Ingrese una direccion de email valida</p>";
            }
            
            
            
        }else{
            
            
header("Location: ../index.php");
        }
        
        
?>
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...