Português (Brasil)
  • cookie
  • nextjs
  • serverless

Como corrigir o erro de tamanho do cookie excedido dividindo cookies

Uma solução para o erro de tamanho de cookie excedido: divida o cookie em múltiplos cookies menores e reconstrua-os no lado do servidor. Esta solução funciona especialmente bem para plataformas serverless sem exigir infraestrutura adicional.

Sijie
Sijie
Developer

Resumindo: Quando o tamanho do seu cookie excede o limite de 4KB do navegador, divida-o em múltiplos cookies menores e reconstrua-os no lado do servidor. Esta solução funciona especialmente bem para plataformas serverless sem exigir infraestrutura adicional.

Uso de cookies nos SDKs do Logto

Na maioria dos SDKs do Logto para aplicativos web tradicionais, armazenamos dados de sessão em cookies HTTP-only para segurança. Aqui está nossa abordagem:

Quando o SDK executa ações que requerem dados de sessão, ele:

  • Criptografa usando criptografia simétrica
  • Armazena a string criptografada em um cookie HTTP-only
  • Define flags de segurança para garantir transmissão apenas por HTTPS

Esta abordagem não requer armazenamento externo e pode ser implantada diretamente em plataformas serverless populares como Vercel sem mudanças adicionais na infraestrutura.

No entanto, ao implementar suporte a multi-organização, encontramos uma limitação. O tamanho do nosso cookie cresceu além do limite de 4KB do navegador porque precisávamos armazenar:

  • Dados de sessão e outros dados de login
  • Tokens de ID para autenticação de usuário
  • 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 múltiplas organizações estarem ativas ao mesmo tempo

Isso resultou no erro:

Os navegadores impõem limites estritos ao tamanho dos cookies, na maioria limitando cookies individuais a 4KB e o tamanho total do cookie 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 pudesse ser uma alternativa, não funciona bem para ambientes serverless onde as instâncias são efêmeras e a memória não é compartilhada entre as requisições.

A solução: divisão de cookies

Uma solução simples é dividir cookies grandes em pedaços menores. Este artigo demonstra a abordagem usando Next.js como exemplo:

1. Dividir os dados de sessão

2. Armazenar os pedaços

3. Reconstruir na requisição

Melhores práticas para implementação

1. Gestão do tamanho dos pedaços

2. Gestão limpa de sessão

Conclusão

A divisão de cookies oferece uma solução elegante que é fácil de implementar e minimamente disruptiva para a arquitetura existente da aplicação. Ao simplesmente quebrar cookies grandes em pedaços menores, os desenvolvedores podem superar limitações de tamanho do navegador sem mudar sua abordagem central de gestão de sessão ou adicionar dependências externas.