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 →