Ejercicio 9 PHP

Curso PHP – Ejercicio 9 (Sistema de Login con Sesiones)

๐Ÿ” Ejercicio 9: Sistema de login con sesiones en PHP

๐Ÿ“Œ Planteamiento:

Crea un sistema bรกsico de login en PHP que:

  • ✅ Use una tabla usuarios con nombre_usuario y contraseรฑa (almacenada con password_hash()).
  • ✅ Permita iniciar sesiรณn validando credenciales.
  • ✅ Use $_SESSION para mantener al usuario autenticado.
  • ✅ Muestre una pรกgina protegida donde se vea el nombre del usuario logueado.
  • ✅ Incluya un botรณn para cerrar sesiรณn.
๐Ÿ‘‰ Usa **PDO** para las consultas y **password_verify()** para validar la contraseรฑa.

✅ Modelo de soluciรณn:

<?php
session_start();

// ๐Ÿ“Œ Conexiรณn a MySQL
$dsn = "mysql:host=localhost;dbname=curso_php;charset=utf8";
$usuario = "root";
$contrasena = "";

try {
    $pdo = new PDO($dsn, $usuario, $contrasena);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("❌ Error de conexiรณn: " . $e->getMessage());
}

// ๐Ÿ“Œ Crear tabla usuarios si no existe
$pdo->exec("CREATE TABLE IF NOT EXISTS usuarios (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nombre_usuario VARCHAR(50) UNIQUE NOT NULL,
  contrasena VARCHAR(255) NOT NULL
)");

// ๐Ÿ“Œ Crear usuario demo si no existe
$consulta = $pdo->prepare("SELECT COUNT(*) FROM usuarios WHERE nombre_usuario = ?");
$consulta->execute(['admin']);
if ($consulta->fetchColumn() == 0) {
    $hash = password_hash('1234', PASSWORD_DEFAULT);
    $pdo->prepare("INSERT INTO usuarios (nombre_usuario, contrasena) VALUES (?, ?)")
        ->execute(['admin', $hash]);
}

// ๐Ÿ“ฅ Procesar login
if (isset($_POST['login'])) {
    $stmt = $pdo->prepare("SELECT * FROM usuarios WHERE nombre_usuario = ?");
    $stmt->execute([$_POST['usuario']]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($user && password_verify($_POST['contrasena'], $user['contrasena'])) {
        $_SESSION['usuario'] = $user['nombre_usuario'];
        header("Location: dashboard.php");
        exit;
    } else {
        $error = "❌ Usuario o contraseรฑa incorrectos.";
    }
}

// ๐Ÿ“ฅ Procesar logout
if (isset($_GET['logout'])) {
    session_destroy();
    header("Location: login.php");
    exit;
}
?>

<!-- ๐Ÿ“„ FORMULARIO LOGIN -->
<?php if (!isset($_SESSION['usuario'])): ?>
  <h3>Iniciar sesiรณn</h3>
  <form method="post">
    <input type="text" name="usuario" placeholder="Usuario" required>
    <input type="password" name="contrasena" placeholder="Contraseรฑa" required>
    <button type="submit" name="login">Entrar</button>
  </form>
  <?php if (isset($error)) echo "<p style='color:red'>$error</p>"; ?>
<?php else: ?>
  <h3>Bienvenido, <?php echo $_SESSION['usuario']; ?></h3>
  <p>Esta es la pรกgina protegida. Solo usuarios autenticados pueden verla.</p>
  <a href="?logout=1">Cerrar sesiรณn</a>
<?php endif; ?>
    

๐ŸŽฏ Claves de este ejercicio:

  • ๐Ÿ“ Uso de password_hash() y password_verify() para mayor seguridad.
  • ๐Ÿ“ Gestiรณn de sesiรณn con $_SESSION para mantener el estado del usuario.
  • ๐Ÿ“ Estructura bรกsica de un login real (formulario, validaciรณn, redirecciรณn).
  • ๐Ÿ“ Botรณn de logout para terminar sesiรณn.

No hay comentarios:

Publicar un comentario

Polรญticas de Privacidad