• cookie
  • nextjs
  • serverless

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.

Sijie
Sijie
Developer

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.

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.