- Buffet

explora!: Encuentra los mejores sitios para salir a comer en la ciudad

Busca por nombre del restaurante o de la ciudad

Ads 728x90

 ChatGPT 4 | Midjourney | Claude | Suno:

A continuación, te proporcionaré un ejemplo detallado de cómo crear un sistema de inicio de sesión utilizando PHP 8, programación orientada a objetos y una base de datos MySQL (accedida a través de phpMyAdmin). Este ejemplo incluirá la creación de una base de datos, una tabla de usuarios, y el código PHP necesario para manejar el inicio de sesión.

Estructura del Proyecto

1. Base de datos: Crearemos una base de datos llamada
login_system
con una tabla
users
.

2. index.php: La página principal con el formulario de inicio de sesión.

3. login.php: El archivo que maneja la lógica de autenticación.

4. User.php: La clase que representa al usuario y maneja la autenticación.

5. dashboard.php: Página a la que se redirige al usuario después de iniciar sesión.

6. logout.php: Para cerrar sesión.

1. Crear la Base de Datos y la Tabla

1. Abre phpMyAdmin.

2. Crea una nueva base de datos llamada
login_system
.

3. Ejecuta la siguiente consulta SQL para crear la tabla
users
:

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
);


4. Inserta algunos usuarios de prueba (con contraseñas hasheadas):

INSERT INTO users (username, password) VALUES 
('usuario1', '$2y$10$WzF5jGJjZcQeY8d8bKqk/.I8pW8T6jzXxWzF5jGJjZcQeY8d8bKqk.'),
('usuario2', '$2y$10$WzF5jGJjZcQeY8d8bKqk/.I8pW8T6jzXxWzF5jGJjZcQeY8d8bKqk.');


*Nota*: Las contraseñas son hasheadas usando
password_hash('contraseña1', PASSWORD_DEFAULT)
.

2.
index.php


Este archivo contendrá el formulario de inicio de sesión.

<?php
session_start(); // Iniciar sesión para manejar sesiones

// Verificar si ya hay un usuario autenticado
if (isset($_SESSION['user'])) {
    header("Location: dashboard.php"); // Redirigir si el usuario ya está autenticado
    exit();
}
?>

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login</title>
</head>
<body>
    <h2>Iniciar Sesión</h2>
    <form action="login.php" method="POST">
        <label for="username">Usuario:</label>
        <input type="text" id="username" name="username" required>
        <br>
        <label for="password">Contraseña:</label>
        <input type="password" id="password" name="password" required>
        <br>
        <input type="submit" value="Iniciar Sesión">
    </form>
</body>
</html>


3.
login.php


Este archivo manejará la lógica de autenticación.

<?php
session_start();
require 'User.php'; // Incluir la clase User

// Verificar si se ha enviado el formulario
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];

    // Crear una instancia de User
    $user = new User();

    // Intentar autenticar al usuario
    if ($user->login($username, $password)) {
        $_SESSION['user'] = $username; // Almacenar el usuario en la sesión
        header("Location: dashboard.php"); // Redirigir al dashboard
        exit();
    } else {
        echo "Nombre de usuario o contraseña incorrectos.";
    }
} else {
    header("Location: index.php"); // Redirigir si no es una solicitud POST
    exit();
}
?>


4.
User.php


Esta clase manejará la lógica relacionada con los usuarios y la conexión a la base de datos.

<?php

class User {
    private $db;

    public function __construct() {
        // Conectar a la base de datos
        $this->db = new mysqli('localhost', 'tu_usuario', 'tu_contraseña', 'login_system');

        // Verificar la conexión
        if ($this->db->connect_error) {
            die("Conexión fallida: " . $this->db->connect_error);
        }
    }

    // Método para autenticar al usuario
    public function login($username, $password) {
        // Preparar una declaración SQL para evitar inyecciones SQL
        $stmt = $this->db->prepare("SELECT password FROM users WHERE username = ?");
        $stmt->bind_param("s", $username);


        $stmt->execute(); // Ejecutar la consulta
        $stmt->store_result(); // Almacenar el resultado

        // Verificar si el usuario existe
        if ($stmt->num_rows > 0) {
            $stmt->bind_result($hashed_password); // Obtener la contraseña hasheada
            $stmt->fetch();

            // Verificar la contraseña ingresada con la contraseña hasheada
            if (password_verify($password, $hashed_password)) {
                return true; // Autenticación exitosa
            }
        }

        return false; // Fallo en la autenticación
    }

    public function __destruct() {
        $this->db->close(); // Cerrar la conexión a la base de datos al destruir el objeto
    }
}
?>


5.
dashboard.php


Este archivo será la página a la que se redirige a los usuarios después de iniciar sesión.

<?php
session_start();

// Verificar si el usuario está autenticado
if (!isset($_SESSION['user'])) {
    header("Location: index.php"); // Redirigir si no está autenticado
    exit();
}

echo "Bienvenido, " . htmlspecialchars($_SESSION['user']) . "!"; // Mostrar el nombre del usuario
echo "<br><a href='logout.php'>Cerrar sesión</a>"; // Enlace para cerrar sesión
?>


6.
logout.php


Este archivo cerrará la sesión del usuario.

<?php
session_start();
session_destroy(); // Destruir la sesión
header("Location: index.php"); // Redirigir al formulario de inicio de sesión
exit();
?>


Flujo de Datos

1. Formulario de Inicio de Sesión (
index.php
):

   • El usuario ingresa su nombre de usuario y contraseña en el formulario.

   • Al enviar el formulario, se envía una solicitud POST a
login.php
.

2. Autenticación (
login.php
):

   • Se verifica si se ha enviado una solicitud POST.

   • Se crea una instancia de la clase
User
.

   • Se llama al método
login()
con el nombre de usuario y contraseña ingresados.

   • Dentro del método
login()
, se establece una conexión a la base de datos y se prepara una consulta SQL para buscar el nombre de usuario.

   • Si se encuentra el usuario, se verifica la contraseña ingresada contra la contraseña hasheada almacenada en la base de datos utilizando
password_verify()
.

   • Si las credenciales son correctas, se almacena el nombre de usuario en la variable de sesión y se redirige al
dashboard.php
. Si no, se muestra un mensaje de error.

3. Página del Dashboard (
dashboard.php
):

   • Se verifica si hay un usuario autenticado revisando la variable de sesión.

   • Si está autenticado, se muestra un mensaje de bienvenida y un enlace para cerrar sesión.

4. Cerrar Sesión (
logout.php
):

   • Se destruye la sesión y se redirige al formulario de inicio de sesión.

Consideraciones Finales

Seguridad: Este ejemplo utiliza prácticas básicas para protegerse contra inyecciones SQL mediante declaraciones preparadas y también utiliza contraseñas hasheadas para mejorar la seguridad.

Validación: En un entorno real, deberías agregar validaciones adicionales y posiblemente medidas como limitar los intentos de inicio de sesión para prevenir ataques de fuerza bruta.

Configuración: Asegúrate de reemplazar
'tu_usuario'
y
'tu_contraseña'
en
User.php
con las credenciales correctas para tu base de datos MySQL.

Este ejemplo proporciona una base sólida sobre cómo implementar un sistema básico de inicio de sesión en PHP utilizando programación orientada a objetos y una base de datos MySQL. Puedes expandirlo según tus necesidades específicas.

Add Comments