
Exclusión de cookies dinámicas en configuraciones de caché de página
La gestión correcta de cookies dinámicas es imprescindible cuando se usa caché de página en WordPress. Excluir las cookies adecuadas evita servir contenido erróneo a usuarios logueados, protege sesiones y mantiene la velocidad. En este artículo técnico y práctico veremos cómo detectarlas, opciones en servidor y CDN, cabeceras HTTP relevantes y pruebas efectivas.
Por qué las cookies dinámicas afectan la caché de página
La caché de página almacena una versión de HTML para servirla rápidamente sin ejecutar PHP. Si una respuesta cacheada no distingue entre usuarios (por ejemplo, visitantes anónimos vs. logueados), un visitante puede recibir contenido con datos ajenos, botones de carrito incorrectos o sesiones visibles. Las cookies dinámicas —las que cambian según usuario o sesión— son la señal más frecuente que indica que la respuesta debe ser no cacheada o cacheada de forma diferenciada.
Identificar cookies dinámicas en WordPress
Antes de configurar exclusiones, identifica qué cookies son dinámicas y qué las genera.
- Cookies core de WordPress: por ejemplo
wordpress_logged_in_*owordpress_sec_*, relacionadas con sesiones de usuario. - eCommerce y plugins:
woocommerce_items_in_cart,wp_woocommerce_session_*, o cookies propias de plugins de membresía o personalización. - Sesiones PHP u otros identificadores:
PHPSESSID,sessionid.
Usa herramientas como el inspector del navegador (Application > Cookies) o curl -I -H "Cookie: nombre=valor" https://tudominio para ver comportamientos distintos según cookies.
Estrategias para excluir cookies en distintos niveles
La exclusión puede aplicarse en varios puntos. Es recomendable usar la solución más cercana al cliente posible, con fallback en servidor/edge.
1) Nivel CDN / Edge
CDNs como Cloudflare permiten crear reglas que evitan cachear cuando ciertas cookies están presentes o se cumplen condiciones específicas. Esto es ideal porque evita servir contenido cacheado desde el borde si la cookie indica una experiencia dinámica.
Por ejemplo, en Cloudflare puedes configurar reglas de cache o workers para ignorar el caché cuando existan cookies de sesión. Más detalles sobre opciones de caché y cabeceras en la documentación oficial: Cloudflare Cache Docs.
2) Nivel servidor web (NGINX / Apache)
En servidores se puede crear lógica que detecte cookies en la petición y fuerce el bypass del caché. En NGINX, por ejemplo, es común usar map y proxy_cache_bypass o variables para decidir la respuesta.
# Ejemplo NGINX simplificado
map $http_cookie $no_cache {
default 0;
~*wordpress_logged_in_ 1;
~*wp_woocommerce_session_ 1;
~*PHPSESSID 1;
}
proxy_cache_bypass $no_cache;
proxy_no_cache $no_cache;
La directiva anterior hace que cualquier petición con esas cookies no lea ni escriba en la caché. Consulte la documentación oficial para ajustar a su arquitectura: NGINX proxy_cache_bypass.
3) Nivel aplicación (WordPress / PHP)
En WordPress se puede controlar la emisión de cabeceras de caché desde PHP o mediante hooks (p. ej. en plugins de caché). Opciones habituales:
- Enviar cabeceras
Cache-Control: private, no-cache, no-storepara respuestas que no deben cachearse. - Agregar lógica que detecte cookies y devuelva
Vary: Cookiesólo cuando sea necesario (ver sección de cabeceras). - Configurar plugins de caché para excluir por cookie: la mayoría permiten listar nombres o patrones (p. ej.
wordpress_logged_in_*).
Ejemplo PHP minimalista para impedir cache a nivel de respuesta:
// functions.php
add_action('send_headers', function() {
if (isset($_COOKIE['wordpress_logged_in_'])) {
header('Cache-Control: private, no-store, must-revalidate');
}
});
Cabeceras HTTP relevantes: Vary y Cache-Control
Las cabeceras HTTP controlan el comportamiento del caché y su interacción con cookies.
- Vary: Cookie — indica que el contenido varía según la cabecera Cookie. Usarla hace que caches respetuosos mantengan versiones separadas según cookies, pero puede multiplicar el número de cachés y penalizar rendimiento.
- Cache-Control — valores como
private,no-storeono-cacheevitan que caches intermedios almacenen la respuesta. - Set-Cookie — si el servidor responde con esta cabecera, muchos CDNs no cachean la respuesta por seguridad.
Use Vary: Cookie con cautela: es útil cuando se necesitan versiones por usuario pero costoso en escala. En la mayoría de casos es preferible bypass total cuando exista la cookie.
Pruebas y validación
Validar que la exclusión funciona es crítico. Flujo de pruebas recomendado:
- Probar sin cookies:
curl -I https://tudominioy verificar cabeceras de caché (X-Cache, Age, etc.). - Probar con cookie dinámica:
curl -I -H "Cookie: wordpress_logged_in_dummy=1" https://tudominioy comprobar que la respuesta no viene de caché y que aparecen cabeceras que indiquen bypass. - Validar en múltiples capas: navegador, borde CDN, servidor origen. A veces la caché del navegador puede enmascarar problemas.
- Monitorización: registre métricas (hit/miss, latencia) para asegurarse de que las reglas no afectan negativamente al rendimiento global.
Buenas prácticas y consideraciones de seguridad
- No cachear nunca respuestas que contengan datos sensibles o PII. Use cabeceras adecuadas (
Cache-Control: privateono-store). - Evite usar
Vary: Cookiepara sitios con mucho tráfico a menos que sea imprescindible; prefiera bypass por cookie en CDN/servidor. - Documente qué cookies se consideran dinámicas y por qué; esto ayuda a evitar reglas demasiado amplias que degraden el cache hit ratio.
- Si usa múltiples CDNs o niveles de caché, aplique las exclusiones en el borde y en el origen para evitar inconsistencias.
Ejemplo real: excluir cookies de WooCommerce y WordPress
Supongamos un sitio con WooCommerce. Cookies típicas a excluir:
wordpress_logged_in_*— usuario autenticado.wp_woocommerce_session_*— datos de carrito/session.woocommerce_items_in_cart— indicador de carrito no vacío.
Implementación práctica:
- En CDN: regla que bypass si existe cualquier cookie que coincida con
wp_woocommerce_session_|woocommerce_items_in_cart|wordpress_logged_in_. - En NGINX: usar map como se mostró arriba para forzar
proxy_cache_bypass. - En WordPress: asegurar que los endpoints de AJAX/REST devuelven cabeceras no cacheables cuando corresponda.
Recursos técnicos y referencias
Para profundizar en el manejo de cookies y cabeceras HTTP, la documentación de referencia es muy útil: la guía de cookies en MDN Web Docs, y la documentación de NGINX sobre bypass de caché NGINX proxy_cache_bypass. Para opciones de configuración y reglas en el borde consulte Cloudflare Cache Docs.
Conclusión
La exclusión de cookies dinámicas es una pieza crítica para mantener integridad y rendimiento en sitios WordPress con caché de página. Identifique las cookies clave, prefiera el bypass en el borde (CDN) y complemente con lógica en el servidor y en la aplicación. Pruebe exhaustivamente con herramientas como curl, monitorice el impacto en hit ratio y documente las reglas. Con una estrategia bien definida evitará servir contenido incorrecto y mantendrá una buena experiencia de usuario sin sacrificar rendimiento.