Cookies y Sesiones en PHP

Objetivos de Aprendizaje
  • Comprender el concepto de cookies y sesiones en aplicaciones web
  • Aprender a crear y gestionar cookies con PHP
  • Dominar el manejo de sesiones para mantener datos del usuario
  • Implementar autenticación básica usando sesiones

Cookies en PHP

Las cookies son pequeños archivos de texto que se almacenan en el navegador del cliente. Son útiles para guardar información específica del usuario y sus preferencias entre diferentes visitas al sitio web.

crear_cookie.php
PHP Básico

<?php
// Crear una cookie que expira en 30 días
$nombre = "usuario";
$valor = "Juan";
$expiracion = time() + (86400 * 30); // 86400 = 1 día

setcookie($nombre, $valor, $expiracion, "/");

// Leer una cookie
if (isset($_COOKIE['usuario'])) {
    echo "¡Bienvenido de nuevo, " . $_COOKIE['usuario'] . "!";
}
?>
                        
Importante

Las cookies deben establecerse antes de enviar cualquier salida al navegador. Es una buena práctica colocar las llamadas a setcookie() al inicio del script.

Sesiones en PHP

Las sesiones proporcionan una manera de preservar datos entre múltiples páginas durante la visita de un usuario. A diferencia de las cookies, los datos de sesión se almacenan en el servidor.

manejo_sesiones.php
PHP Intermedio

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

// Almacenar datos en la sesión
$_SESSION['usuario_id'] = 123;
$_SESSION['nombre'] = "Juan Pérez";
$_SESSION['logueado'] = true;

// Verificar si el usuario está logueado
if (isset($_SESSION['logueado']) && $_SESSION['logueado'] === true) {
    echo "Usuario autenticado: " . $_SESSION['nombre'];
}

// Cerrar sesión
// session_destroy();
?>
                        

Ejemplo Práctico: Sistema de Login

A continuación, veremos un ejemplo básico de cómo implementar un sistema de login usando sesiones:

login.php
PHP Completo

<?php
session_start();

// Verificar si el formulario fue enviado
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $usuario = $_POST['usuario'] ?? '';
    $password = $_POST['password'] ?? '';
    
    // En un caso real, verificarías contra una base de datos
    if ($usuario === 'admin' && $password === '123456') {
        $_SESSION['logueado'] = true;
        $_SESSION['usuario'] = $usuario;
        header('Location: dashboard.php');
        exit;
    } else {
        $error = 'Usuario o contraseña incorrectos';
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <form method="post">
        <input type="text" name="usuario" placeholder="Usuario" required><br>
        <input type="password" name="password" placeholder="Contraseña" required><br>
        <button type="submit">Iniciar Sesión</button>
    </form>
</body>
</html>
                        
Consideraciones de Seguridad
  • Siempre usa HTTPS cuando manejes datos sensibles
  • Establece el parámetro httponly en las cookies para prevenir ataques XSS
  • Nunca almacenes contraseñas en texto plano, usa funciones de hash como password_hash()
  • Implementa protección contra CSRF en tus formularios

Ejercicio Práctico

Crea un sistema simple de preferencias de usuario usando cookies que:

  1. Permita al usuario seleccionar un tema (claro/oscuro)
  2. Guarde el idioma preferido
  3. Recuerde estas preferencias durante 30 días
preferencias.php

<?php
// Tu código aquí
// Sugerencia: Usa setcookie() para cada preferencia
// Verifica si existen cookies antes de mostrar valores por defecto
?>

<form method="post">
    <select name="tema">
        <option value="claro">Tema Claro</option>
        <option value="oscuro">Tema Oscuro</option>
    </select>
    
    <select name="idioma">
        <option value="es">Español</option>
        <option value="en">English</option>
    </select>
    
    <button type="submit">Guardar Preferencias</button>
</form>