En este artículo de programación con PHP y MySQL te mostraré cómo implementar un login, autenticación o inicio de sesión con límite de intentos, teniendo a MySQL como base de datos.

PHP y MySQL - Login con máximo número de intentos

PHP y MySQL – Login con máximo número de intentos

Con el límite de intentos me refiero a que cuando el usuario coloque la contraseña incorrecta, se irá aumentando un contador de errores o de intentos fallidos. Si llega a determinado número, se bloqueará el acceso hasta que el contador se reinicie.

Este ejemplo completo de código que te mostraré tiene el módulo de login, de creación de usuarios y de usuarios en donde se pueden borrar los intentos fallidos de cualquier usuario.

Además, solo los usuarios que hayan iniciado sesión pueden acceder a la administración de usuarios del sistema. Recuerda que para guardar todos los datos vamos a usar MySQL y vamos a usar PHP como lenguaje de programación.

Base de datos

Comencemos viendo la base de datos. Como en varios de mis proyectos, las credenciales de acceso residen en un archivo llamado env.php que tú debes crear, basándote en el archivo env.ejemplo.php. El mío se ve así:

Fíjate en que mi base de datos se llama login. Configura el nombre de la base de datos, misma que debe existir en tu sistema, y luego importa las tablas:

En este caso tenemos solo dos tablas. Una que guardará todos los datos de los usuarios y otra que guardará cuántos intentos fallidos tiene un usuario, misma que podemos usar para saber si el usuario puede acceder o no, y que iremos alimentando cada vez que haya un error de autenticación.

La tabla de intentos está relacionada a la tabla de usuarios correctamente. Ya después leemos el archivo y obtenemos una conexión con las siguientes funciones:

Formulario para login

Comencemos viendo el formulario en donde se inicia sesión, pues ahí se hace todo. El mismo solo solicita el correo y la contraseña. También muestra un mensaje en caso de que el mismo esté presente en la URL:

Cuando el formulario sea enviado se va a procesar en login.php que va a revisar que los datos estén presentes y después va a invocar a la función hacerLogin, misma que veremos más tarde. Por ahora los comentarios explican todo:

Como puedes ver hacemos simples redirecciones, y en caso de que todo vaya bien, iniciamos la sesión para ir a la página de administración de usuarios.

Comprobando límite y registrando errores

Vayamos a la función que hace la magia, misma que vimos anteriormente y que es hacerLogin. Aquí es en donde se verifica la contraseña como los intentos, y se guarda el intento fallido en caso de existir:

Lo primero que hacemos es obtener el usuario de la base de datos. Si no existe, no se lo indicamos (pues es un riesgo de seguridad), solo le decimos que su contraseña o correo es incorrecto.

Después obtenemos los intentos fallidos que tiene y, si supera el máximo, lo indicamos, ya que no puede iniciar sesión si supera el máximo de intentos.

Finalmente en caso de que pueda acceder, comprobamos su contraseña. La comparamos y si todo va bien entonces el login es correcto, así que borramos los intentos fallidos.

Caso contrario, si la contraseña es incorrecta y por lo tanto hay un intento fallido, agregamos un intento fallido a ese id de usuario.

Registro de usuarios

Registro de usuarios - Ejemplo de inició de sesión con PHP usando límite de intentos

Registro de usuarios – Ejemplo de inició de sesión con PHP usando límite de intentos

El sistema cuenta con un módulo simple de registro de usuarios, que solo está para no tener que ingresar los datos manualmente. El código del formulario es el siguiente:

Cuando se envía, los datos se procesan en registrar_usuario.php cuyo código es el siguiente, en donde se invoca, de nuevo, a una función:

El código de la función queda así:

Administración de usuarios

Administración de usuarios con interfaz para reiniciar el contador de intentos fallidos

Administración de usuarios con interfaz para reiniciar el contador de intentos fallidos

Si el usuario inició sesión correctamente se le muestra una página en donde puede reiniciar el conteo de intentos fallidos gracias a un enlace que aparece junto al correo y el conteo de los usuarios. El código que dibuja la tabla y el enlace para el reseteo es:

Como te puedes dar cuenta, se verifica si el usuario ha iniciado sesión antes, por lo que se puede decir que esta página está protegida. Yo sé que no tiene sentido que un usuario pueda reiniciar el contador de intentos fallidos, pero recuerda, es un simple ejemplo, puedes adaptarlo a tus necesidades.

Ya para la parte de reiniciar el conteo, se hace lo siguiente:

Siguiendo el patrón de todas las demás acciones, este archivo simplemente incluye el archivo de funciones.php e invoca a la que es necesaria. La función luce así:

Poniendo todo junto

Así queda este proyecto completo en donde se implementa un límite de intentos y no se permite el acceso hasta que el administrador reinicia el contador de intentos fallidos.

No puedo colocar aquí todo el código e ir explicando paso por paso cada cosa, pues el artículo se haría realmente largo.

Aquí solo te he explicado el código relevante, ya que en otros posts he explicado lo que es la conexión de PHP a MySQL, la plantilla de Bootstrap, la subconsulta con count o un login básico con PHP.

Te dejo el código completo en un repositorio de GitHub en donde encontrarás el archivo de funciones completas, el esquema, etcétera. Y también te dejo más posts sobre PHP.


Estoy disponible para trabajar en tu proyecto o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.
Si el post fue de tu agrado muestra tu apoyo compartiéndolo, suscribiéndote al blog, siguiéndome o realizando una donación.

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 2,597 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

0 Comentarios

Deja un comentario

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: