← PHP EspañolChapter 12 of 13

Sesiones y Cookies

## Objetivos de Aprendizaje - Comprender las sesiones de PHP - Trabajar con datos de sesión - Establecer y leer cookies - Implementar seguridad de sesiones ## Sesiones ### Cómo Funcionan las Sesiones 1. Usuario visita el sitio 2. Servidor crea ID de sesión único 3. ID de sesión almacenado en cookie O pasado vía URL 4. Servidor usa ID de sesión para recuperar datos de sesión 5. Los datos persisten entre solicitudes de página ### Iniciando una Sesión ```php ``` ### Estado de Sesión ```php ``` ## Datos de Sesión ### Almacenando Datos ```php 'dark', 'language' => 'en' ]; echo "Session data stored"; ?> ``` ### Leyendo Datos ```php ``` ### Verificando Datos de Sesión ```php ``` ### Eliminando Datos ```php ``` ### Mensajes Flash ```php ``` ## Configuración de Sesión ### Configuración de php.ini ```ini session.save_handler = files session.save_path = "/var/lib/php/sessions" session.cookie_httponly = 1 session.cookie_secure = 1 session.use_strict_mode = 1 session.gc_maxlifetime = 3600 ``` ### ini_set() ```php 3600, 'path' => '/', 'domain' => 'example.com', 'secure' => true, 'httponly' => true, 'samesite' => 'Strict' ]); session_start(); ?> ``` ### Regenerar ID de Sesión ```php $interval) { session_regenerate_id(true); $_SESSION['last_regeneration'] = time(); } } ?> ``` ## Cookies ### Estableciendo Cookies ```php time() + (30 * 24 * 60 * 60), 'path' => '/', 'domain' => 'example.com', 'secure' => true, 'httponly' => true, 'samesite' => 'Strict' ]); ?> ``` ### Parámetros de Cookie | Parámetro | Descripción | |-----------|-------------| | expires | Timestamp Unix para expiración | | path | Ruta en el dominio donde la cookie está disponible | | domain | Dominio para la cookie | | secure | Solo enviar sobre HTTPS | | httponly | No accesible vía JavaScript | | samesite | 'Strict', 'Lax', o 'None' | ### Leyendo Cookies ```php ``` ### Modificando Cookies ```php ``` ### Eliminando Cookies ```php time() - 3600, 'path' => '/', 'domain' => 'example.com', 'secure' => true, 'httponly' => true ]); // Unset from $_COOKIE unset($_COOKIE['username']); ?> ``` ## Arreglos de Cookies ### Estableciendo Cookie de Arreglo ```php 'dark', 'language' => 'en', 'notifications' => true ]; setcookie("preferences", json_encode($preferences), time() + (30 * 24 * 60 * 60)); ?> ``` ### Leyendo Cookie de Arreglo ```php ``` ## Sesiones vs Cookies | Característica | Sesiones | Cookies | |---------|----------|---------| | Almacenamiento | Servidor | Navegador | | Capacidad | Grande (ilimitado) | Pequeño (~4KB por cookie) | | Seguridad | Más seguro (sin datos en navegador) | Menos seguro (expuesto al cliente) | | Vida útil | Hasta que la sesión expire | Hasta que expire | | Rendimiento | Más lento (lectura en servidor) | Más rápido (lectura en cliente) | ## Ejemplos Prácticos ### Inicio de Sesión de Usuario ```php ``` ### Página Autenticada ```php $timeout)) { session_unset(); session_destroy(); header("Location: login.php?error=timeout"); exit; } // Update last activity $_SESSION['last_activity'] = time(); // Show page content echo "Welcome, " . htmlspecialchars($_SESSION['username']); ?> ``` ### Cerrar Sesión de Usuario ```php ``` ### Recordarme (Cookie) ```php ``` ```php time() + (30 * 24 * 60 * 60), 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'Strict' ]); } ?> ``` ## Mejores Prácticas de Seguridad ### Seguridad de Sesión ```php ``` ### Seguridad de Cookies ```php time() + (30 * 60), 'path' => '/', 'domain' => '', 'secure' => true, // HTTPS only 'httponly' => true, // No JavaScript access 'samesite' => 'Strict' // CSRF protection ]); // Sensitive data: use session instead of cookie // Never store passwords in cookies ?> ``` ### Protección CSRF ```php ``` ```php ``` ## Resumen - `session_start()` inicia una sesión (debe ser antes de cualquier salida) - El arreglo `$_SESSION` almacena datos de sesión - `session_destroy()` destruye la sesión completamente - `session_regenerate_id()` crea nuevo ID de sesión - `setcookie()` envía encabezado de cookie (antes de cualquier salida) - El arreglo `$_COOKIE` contiene valores de cookies - Las sesiones almacenan datos del lado del servidor; las cookies almacenan datos del lado del cliente - Siempre usa configuración segura de cookies: `httponly`, `secure`, `samesite` - Regenerar ID de sesión después del login - Implementar timeout de sesión para seguridad - Usar tokens CSRF para protección de formularios

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →