Cómo crear un sistema de inicio de sesión PHP para su sitio web
¿Está buscando integrar un sistema de inicio de sesión en PHP? En este artículo, le muestro cómo hacer un flujo de inicio de sesión básico en PHP. Crearemos un formulario de inicio de sesión, validaremos las credenciales y redirigiremos al usuario en la página de la cuenta. También agregaría un código para cerrar la sesión del usuario. Además, mostraremos los mensajes de error si se ingresan las credenciales incorrectas.
Por el bien del tutorial, supongo que está utilizando el hash ‘md5’ para almacenar la contraseña. Escribiría el código considerando el hash md5 de una cadena. Puede que esté utilizando otro algoritmo. En ese caso, debe cambiar la consulta según su algoritmo.
Para integrar el flujo de inicio de sesión, necesitamos una tabla de base de datos que almacene los detalles del usuario. Contra esta tabla, validamos si el usuario ingresó las credenciales correctas o no. Si las credenciales de usuario son correctas, solo ellos deberían tener acceso a las páginas seguras.
En mi caso, creé una tabla de ‘usuarios’ y agregué algunas entradas ficticias. También agregué una columna de ‘estado’ que se utilizará para averiguar si una cuenta está activa o no. Esta columna tiene el tipo de datos ENUM con valores 0 y 1.
- 1: la cuenta está activa
- 0: la cuenta no está activa
Crear un formulario de inicio de sesión
Para comenzar, creemos un formulario de inicio de sesión donde los usuarios pueden ingresar sus credenciales. Estoy usando un marco Bootstrap para crear un formulario de inicio de sesión. Mi index.php
archivo contiene el siguiente código.
<!DOCTYPE html>
<html>
<head>
<title>Login Form</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-6">
<h3>Login Form</h3>
<?php if(!empty($error_message)) { ?>
<div class="alert alert-danger"><?php echo $error_message; ?></div>
<?php } ?>
<form method="post">
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" name="email" placeholder="Email" required />
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" name="password" placeholder="Password" required />
</div>
<button type="submit" name="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
</div>
</body>
</html>
El código anterior mostrará el formulario de inicio de sesión como se muestra en la siguiente captura de pantalla.
He agregado la variable $error_message
en el código que imprimirá los errores de inicio de sesión.
Código PHP para validar las credenciales de los usuarios
Ya está listo con el formulario de inicio de sesión y la tabla de la base de datos. Luego, al enviar un formulario, tenemos que escribir código PHP que verifica las credenciales del usuario con los registros de la base de datos. Si los detalles son correctos, registre al usuario en el sistema y lo redireccione a la myaccount.php
página.
Cree un config.php
archivo y agregue un código para la conexión a la base de datos.
<?php
$conn = new mysqli('DB_HOST', 'DB_USER', 'DB_PASSWORD', 'DB_NAME');
if ($conn->connect_errno) {
echo "Error: ". $conn->connect_error;
}
?>
Reemplace los marcadores de posición con los valores reales.
Ahora, en el index.php
archivo antes del inicio de la etiqueta html, agregue el siguiente código.
<?php
session_start();
require_once('config.php');
//if user is logged in redirect to myaccount page
if (isset($_SESSION['id'])) {
header('Location: myaccount.php');
}
$error_message = '';
if (isset($_POST['submit'])) {
extract($_POST);
if (!empty($email) && !empty($password)) {
$sql = "SELECT id, status FROM users WHERE email = '".$conn->real_escape_string($email)."' AND password = '".md5($conn->real_escape_string($password))."'";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
if($row['status']) {
$_SESSION['id'] = $row['id'];
header('Location: myaccount.php');
} else {
$error_message = 'Your account is not active yet.';
}
} else {
$error_message = 'Incorrect email or password.';
}
} else {
$error_message = 'Please enter email and password.';
}
}
?>
Aquí en el código, mientras verificaba la contraseña, usé el método PHP md5 asumiendo que almacenó la contraseña usando este algoritmo.
Código de cierre de sesión
La siguiente parte es agregar código para cerrar la sesión del usuario. Para ello, cree un myaccount.php
archivo. Una cosa más que se necesita para manejar que solo los usuarios registrados deben acceder a esta página.
myaccount.php
<?php
session_start();
if (isset($_GET['action']) && ('logout' == $_GET['action'])) {
unset($_SESSION['id']);
}
if (isset($_SESSION['id'])) {
?>
<h3>Welcome User! <a href="?action=logout">Logout</a></h3>
<?php
} else { //redirect to login page
header('Location: index.php');
}
?>
Usando la sesión de PHP estamos averiguando si damos acceso a esta página o no. Si la sesión no está configurada, redirija al usuario a la página de inicio de sesión.
Espero que comprenda los conceptos básicos de la creación de un sistema de inicio de sesión en PHP. Comparta sus pensamientos y sugerencias en la sección de comentarios a continuación.
Artículos relacionados
- Sistema de registro e inicio de sesión de usuario en Laravel
- Inicio de sesión de Google en Laravel usando Laravel Socialite
- Cómo crear un sistema de registro PHP