Cómo solucionar el error de tamaño de cookie excedido dividiendo las cookies
Una solución para el error de tamaño de cookie excedido: dividir la cookie en varias cookies más pequeñas y reconstruirlas en el lado del servidor. Esta solución funciona especialmente bien para plataformas sin servidor, sin requerir infraestructura adicional.
Resumen: Cuando el tamaño de tu cookie supera el límite de 4 KB del navegador, divídela en varias cookies más pequeñas y reconstruirlas en el lado del servidor. Esta solución funciona especialmente bien para plataformas sin servidor, sin requerir infraestructura adicional.
Uso de cookies en los SDK de Logto
En la mayoría de los SDK de Logto para aplicaciones web tradicionales, almacenamos datos de sesión en cookies HTTP-only por seguridad. Este es nuestro enfoque:
Cuando el SDK realiza acciones que requieren datos de sesión, este:
- Los cifra usando cifrado simétrico
- Almacena la cadena cifrada en una cookie HTTP-only
- Establece banderas de seguridad para asegurar la transmisión solo por HTTPS
Este enfoque no requiere almacenamiento externo y puede desplegarse directamente en plataformas sin servidor populares como Vercel sin ningún cambio adicional en la infraestructura.
El problema: Error de tamaño de cookie excedido
Sin embargo, al implementar soporte para múltiples organizaciones, encontramos una limitación. El tamaño de nuestra cookie creció más allá del límite de 4 KB del navegador porque necesitamos almacenar:
- Datos de inicio de sesión y otros datos de sesión
- Tokens de identificación para autenticación de usuarios
- Tokens de actualización
- Tokens de acceso con diferentes indicadores de recursos
- Tokens de organización que están en JWT con payload, uno por organización, lo cual puede ser bastante grande en el caso de que varias organizaciones estén activas al mismo tiempo
Esto resultó en el error:
Los navegadores imponen límites estrictos en el tamaño de las cookies, limitando la mayoría de las cookies individuales a 4 KB y el tamaño total de las cookies a 8 KB por dominio.
¿Qué pasa con el uso de almacenamiento externo?
Usar almacenamiento externo como Redis o una base de datos requeriría una configuración de infraestructura adicional, aumentando tanto los costos como la complejidad para los usuarios del SDK. Esto va en contra de nuestro objetivo de proporcionar una solución amigable para desarrolladores.
Aunque el almacenamiento en memoria podría ser una alternativa, no funciona bien en entornos sin servidor donde las instancias son efímeras y la memoria no se comparte entre solicitudes.
La solución: División de cookies
Una solución simple es dividir cookies grandes en partes más pequeñas. Este artículo demuestra el enfoque usando Next.js como ejemplo:
1. Dividir los datos de sesión
2. Almacenar los fragmentos
3. Reconstruir en la solicitud
Mejores prácticas para la implementación
1. Gestión del tamaño de los fragmentos
2. Gestión limpia de sesiones
Monitorear el tamaño total de las cookies:
Conclusión
La división de cookies ofrece una solución elegante que es fácil de implementar y mínimamente disruptiva para la arquitectura de la aplicación existente. Al simplemente descomponer cookies grandes en fragmentos más pequeños, los desarrolladores pueden superar las limitaciones de tamaño del navegador sin cambiar su enfoque de gestión de sesiones central ni agregar dependencias externas.