Como corrigir erro de tamanho do cookie excedido dividindo cookies
Uma solução para o erro de tamanho do cookie excedido: divida o cookie em vários cookies menores e reconstrua-os do lado do servidor. Esta solução funciona especialmente bem para plataformas serverless sem exigir infraestrutura adicional.
Resumo: Quando o tamanho do teu cookie excede o limite de 4KB do navegador, divide-o em vários cookies menores e reconstrói-os do lado do servidor. Esta solução funciona especialmente bem para plataformas serverless sem exigir infraestrutura adicional.
Utilização de cookies nos SDKs da Logto
Na maioria dos SDKs Logto para aplicações web tradicionais, armazenamos dados de sessão em cookies HTTP-only por segurança. Aqui está a nossa abordagem:
Quando o SDK realiza ações que requerem dados de sessão, ele:
- Criptografa usando criptografia simétrica
- Armazena a string criptografada em um cookie HTTP-only
- Define bandeiras seguras para garantir a transmissão apenas por HTTPS
Esta abordagem não requer armazenamento externo e pode ser implementada diretamente em plataformas serverless populares como Vercel sem quaisquer alterações de infraestrutura.
O problema: Erro de tamanho do cookie excedido
No entanto, ao implementar suporte a múltiplas organizações, atingimos uma limitação. O nosso tamanho de cookie cresceu além do limite de 4KB do navegador porque precisávamos armazenar:
- Dados de sessão e de login
- Tokens de ID para autenticação de usuários
- Tokens de atualização
- Tokens de acesso com diferentes indicadores de recurso
- Tokens de organização que estão em JWT com payload, um por organização, que podem ser bastante grandes no caso de várias organizações estarem ativas ao mesmo tempo
Isso resultou no erro:
Os navegadores impõem limites estritos de tamanho de cookie, com a maioria limitando cookies individuais a 4KB e tamanho total de cookies a 8KB por domínio.
E quanto a usar armazenamento externo?
Usar armazenamento externo como Redis ou um banco de dados exigiria configuração adicional de infraestrutura, aumentando tanto os custos quanto a complexidade para os usuários do SDK. Isso vai contra nosso objetivo de fornecer uma solução amigável para desenvolvedores.
Embora o armazenamento em memória possa ser uma alternativa, ele não funciona bem em ambientes serverless onde instâncias são efêmeras e a memória não é compartilhada entre requisições.
A solução: Divisão de cookies
Uma solução simples é dividir grandes cookies em partes menores. Este artigo demonstra a abordagem usando Next.js como exemplo:
1. Dividir os dados da sessão
2. Armazenar as partes
3. Reconstruir na requisição
Melhores práticas para implementação
1. Gestão do tamanho das partes
2. Gestão de sessão limpa
Monitorizar o tamanho total do cookie:
Conclusão
A divisão de cookies oferece uma solução elegante que é fácil de implementar e minimamente disruptiva para a arquitetura de aplicação existente. Ao simplesmente dividir grandes cookies em partes menores, os desenvolvedores podem superar as limitações de tamanho dos navegadores sem mudar a abordagem principal de gestão de sessão ou adicionar dependências externas.