Como comunicar sessão expirada

Saiba como avisar que uma sessão vai expirar, permitir sua extensão e recuperar o contexto com segurança, acessibilidade e sem perder dados.

Modal de aviso de expiração de sessão sobre um formulário.
Nível de impácto
Crítico
Status
Recomendado
Nível de evidênica
Forte evidência

Contexto

Uma sessão pode terminar por inatividade, pelo limite máximo definido pela política de segurança ou por uma mudança de risco. Para a pessoa, porém, o problema não é apenas precisar entrar novamente: uma expiração silenciosa pode interromper uma tarefa, apagar dados e gerar a impressão de que o produto falhou.

A experiência deve tratar dois momentos diferentes. Antes do vencimento, avise com tempo suficiente e permita continuar quando a política autorizar. Depois do vencimento, explique o que aconteceu, proteja informações sensíveis e ofereça um caminho direto para autenticar novamente e retomar o contexto seguro.

Defina no servidor os limites de inatividade e de duração total da sessão conforme o risco. Quando a sessão estiver próxima de expirar e puder ser prorrogada, apresente um aviso claro com o tempo restante e uma ação principal como “Continuar sessão”. Ofereça também uma saída explícita, como “Sair agora”, quando fizer sentido.

Use um diálogo modal somente quando a decisão precisar interromper a tarefa. O título deve dizer o que está acontecendo; o texto deve explicar o motivo, a consequência e o que cada ação fará. O contador precisa refletir o prazo real do servidor, inclusive entre abas, sem depender apenas de um temporizador local.

Se a sessão já terminou, substitua o aviso por uma mensagem de estado: informe que ela expirou por segurança ou inatividade, remova dados sensíveis da tela e leve a pessoa para uma nova autenticação. Preserve, quando for seguro, o caminho de retorno e os dados não sensíveis ainda não enviados. Após autenticar, restaure a tarefa e confirme o que foi recuperado.

Trate a extensão como uma ação confirmada pelo servidor. Uma movimentação passiva do mouse, uma aba em segundo plano ou um clique após o vencimento não devem criar a falsa impressão de que a sessão continua válida.

Modal do USWDS avisando que a sessão terminará em breve.
Exemplo real: o U.S. Web Design System apresenta um modal de ação obrigatória que explica a inatividade, informa quando a sessão terminará e oferece escolhas explícitas para permanecer conectado ou sair. Fonte: USWDS — https://designsystem.digital.gov/components/modal/.

Porque isso importa?

O encerramento automático reduz o risco de uma conta permanecer aberta em um dispositivo abandonado. OWASP e NIST recomendam que os limites sejam aplicados no servidor e que a reautenticação seja proporcional ao risco, porque controles apenas no navegador podem ser contornados ou ficar dessincronizados.

Ao mesmo tempo, a expiração pode excluir trabalho e impor uma barreira maior a pessoas que precisam de mais tempo para ler, digitar, localizar documentos ou operar tecnologias assistivas. A WCAG orienta avisar sobre limites de tempo e permitir sua extensão quando o prazo não for essencial.

Comunicar os dois estados — “vai expirar” e “expirou” — reduz surpresa e ajuda a pessoa a escolher. Preservar o contexto após a reautenticação também evita retrabalho sem enfraquecer a proteção da sessão.

  • Em áreas autenticadas com limite de inatividade.
  • Em sistemas com dados pessoais, financeiros ou corporativos.
  • Em formulários e tarefas longas.
  • Quando a sessão pode ser estendida com segurança.
  • Quando a reautenticação permite retomar o fluxo.
  • Em produtos usados em dispositivos compartilhados.
  • Quando não existe sessão autenticada.
  • Para prazos que não têm relação com segurança.
  • Como aviso repetitivo longe do vencimento.
  • Quando o prazo pode ser removido sem risco.
  • Quando a extensão contrariar uma política obrigatória.
  • Como substituto para salvamento automático.
Modal do ONS com contagem regressiva e ação para continuar a sessão.
Exemplo real: o Office for National Statistics informa a inatividade, comunica que o progresso será salvo, mostra o tempo restante e oferece uma ação direta para continuar a tarefa. Fonte: ONS Design System — https://service-manual.ons.gov.uk/design-system/components/timeout-modal.

Recomendações

Faça

Práticas recomendadas
  • Avise antes do vencimento.
  • Mostre o tempo restante.
  • Explique a consequência.
  • Priorize “Continuar sessão”.
  • Ofereça saída explícita.
  • Sincronize com o servidor.
  • Preserve o contexto seguro.
  • Restaure após autenticar.
  • Teste múltiplas abas.
Aviso de sessão prestes a expirar com uma ação para continuar.
Exemplo correto: antes do vencimento, o aviso explica o que acontecerá, mostra o tempo restante e oferece uma ação direta para continuar. Depois da reautenticação, a pessoa retorna ao contexto seguro.

Evite

Práticas a evitar
  • Não expire em silêncio.
  • Não use erro genérico.
  • Não dependa só do navegador.
  • Não renove com movimento passivo.
  • Não anuncie cada segundo.
  • Não apague trabalho seguro.
  • Não exponha dados após expirar.
  • Não prometa extensão impossível.
  • Não empilhe modais.
Formulário perdido após a expiração silenciosa da sessão.
Exemplo incorreto: a sessão termina sem aviso, o sistema apresenta uma falha genérica e descarta a tarefa, sem explicar o motivo nem oferecer recuperação.
Modal do CMS Design System avisando sobre inatividade e tempo restante.
Exemplo real: o CMS Design System usa um aviso de inatividade com prazo compreensível e uma ação principal para continuar a sessão antes do encerramento. Fonte: CMS Design System — https://design.cms.gov/components/idle-timeout/.

Acessibilidade

Quando o aviso exigir decisão imediata, implemente-o como diálogo modal acessível, com nome e descrição programáticos, foco inicial em uma ação segura e foco contido enquanto estiver aberto. O conteúdo ao fundo deve ficar indisponível para interação. Ao fechar ou estender a sessão, devolva o foco a um ponto lógico.

Anuncie a abertura do aviso e o tempo disponível, mas não faça o leitor de tela repetir a contagem a cada segundo. Prefira atualizações em intervalos significativos e uma mensagem urgente quando restar pouco tempo. O contador visual não pode ser o único meio de comunicar a urgência.

Permita operar todas as ações por teclado, mantenha contraste e alvo adequados e não dependa de cor. Quando o prazo não for essencial, ofereça tempo suficiente e uma forma simples de estendê-lo. Depois da expiração, mova o foco para a mensagem de estado e identifique claramente a ação de entrar novamente.

Checklist

  • O motivo da expiração está claro?
  • O aviso aparece antes do vencimento?
  • Há tempo suficiente para responder?
  • O prazo corresponde ao servidor?
  • Existe uma ação para continuar?
  • A saída também está disponível?
  • O comportamento entre abas é consistente?
  • O estado expirado é diferente do aviso?
  • A mensagem evita jargão técnico?
  • Dados sensíveis são ocultados após expirar?
  • O contexto seguro é preservado?
  • A tarefa retorna após autenticar?
  • O diálogo funciona com teclado?
  • O foco é gerenciado corretamente?
  • O leitor de tela não anuncia cada segundo?
  • O fluxo foi testado com diferentes tempos e conexões?

Referências

  • W3C WAI — Timing Adjustable. Determina que limites de tempo sejam removidos, ajustados ou estendidos quando não forem essenciais e que a pessoa seja avisada com antecedência suficiente para agir. Consultar o critério.
  • W3C WAI — Re-authenticating. Recomenda que, após a expiração de uma sessão autenticada, a pessoa possa entrar novamente e continuar a atividade sem perder dados ou contexto. Consultar o critério.
  • OWASP — Session Management Cheat Sheet. Orienta aplicar os limites no servidor, combinar tempo de inatividade e duração absoluta, avisar antes da expiração e invalidar a sessão nos dois lados quando ela terminar. Consultar a orientação.
  • NIST — SP 800-63B-4, Reauthentication. Diferencia limite total e limite por inatividade, permite alertar antes do encerramento e exige nova autenticação quando a sessão termina. Consultar a norma.
  • U.S. Web Design System — Modal. Usa “sua sessão está prestes a expirar” como exemplo de decisão que pode exigir um modal sem fechamento livre, com propósito, consequência e ações claras. Consultar o componente.
  • CMS Design System — Idle Timeout. Apresenta um componente específico que monitora inatividade e aciona um diálogo de aviso antes do fim da sessão. Consultar o componente.
  • DWP Design System — Manage a session timeout. Consolida o padrão de avisar antes do vencimento, permitir extensão e explicar o que ocorreu após a expiração, com base em acessibilidade e uso em serviços reais. Consultar o padrão.
  • Office for National Statistics — Timeout modal. Exemplo aplicado que informa a inatividade, explicita que o progresso será salvo, apresenta o tempo restante e oferece uma ação direta para continuar a tarefa. Consultar o componente.
Veja também

Esta recomendação foi útil para você?