Hola, pinta muy interesante tu problema. me uno a la causa jaja.
mira, mas o menos esto podria ser una posible solución. faltan los metodos que esa parte te toca a ti.
Código PHP:
Ver original<?php
//sacar de la bd
if (usuarioExiste()):
$registros;
//$registros = cursor; la variable registros almacenara todas las filas de una consulta para una ip en concreto. Osea el resultado del select
//agregarBD(ip -- idUser -- horaDeInicio);
//tienes que tener una tabla con los campos: ip -- id_usuario -- horaDeInicio (cuando accede con ese usuario)
agregarBD($ip,$idUser,$horaIni);
//si han pasado menos de 24 horas y el numero de registros es menor a 5
if(isMenosDe24h($registros) && isRegistrosMenorA6()):
iniciarAcceso();
else:
//si han pasado mas de 24h borrarmos sus registros de la BD y acede al sistema
if(!isMenosDe24h(registros)):
borrarRegistrosBD();
iniciarAcceso();
else:
//en cualquier otro caso lo enviamos u una pagina de acceso denegado
header("Location: accesoDenegado.php"); endif;
endif;
else:
print "no existe el usuario";
endif;
?>
explicacion de metodos:
------------------------------
usuarioExiste() : boolean --> se hace un select con el user y el password introducion en el form del html, y si te devuelve una fila, tienes que devolver true, en caso contrario lo contrario, osea false :p
agregarBD() : void --> insertar los 3 parametros, la ip, el id del user y la hora de inicio(la hora en el momento en el que se logea). Esos params en una tabla que solo tenga esas 3 columns.
ojo, aqui viene lo mas importante isMenosDe24h() : boolean --> con la variable registros la recorres y te quedas con la
primera hora del primer acceso de ese usuario. Y luego comparas esa fecha con la hora del sistema y si han pasado menos de 24 hr devolvera true, caso contrario false.
isRegistrosMenorA6() : boolean--> simplemente haces un select de los id del users para la ip en concreto. Lo haces con un distinct. ejemp: "select distinct idUser where ip = '{$ip}'". Luego cuentas el numero de registros, p.ejemp con mysql_num_rows(). y si es menor a 6 true sino false.
iniciarAcceso() : void --> aqui implementas la logica que quieras para acceder al sistema.
borrarRegistrosBD() --> borrar los registros en la tabla para la ip en concreto.
p.d: seguramente hayan mas formas y mas eficientes, pero a priori es lo que se me ocurre.
Saludos!