Sobes.tech
Middle

Qual é o mecanismo de funcionamento da sessão em aplicações web?

sobes.tech IA

Resposta da IA

O mecanismo de funcionamento da sessão baseia-se na manutenção do estado do utilizador entre pedidos HTTP, que por sua natureza são sem estado. Isto é conseguido através do uso de um identificador de sessão único.

Principais passos:

  1. Primeiro pedido do utilizador: O utilizador envia um pedido ao servidor web.
  2. Criação da sessão: Se o pedido provém de um utilizador desconhecido (que não tem um identificador de sessão), o servidor cria uma nova sessão do seu lado (na memória, base de dados, sistema de ficheiros) e gera um identificador de sessão único.
  3. Envio do identificador ao cliente: O servidor envia este identificador de sessão ao cliente na forma de cookie (Set-Cookie: SESSIONID=xyz; path=/).
  4. Armazenamento no cliente: O navegador guarda este cookie e envia-o com todos os pedidos seguintes ao mesmo domínio (Cookie: SESSIONID=xyz).
  5. Identificação no servidor: Ao receber cada pedido seguinte com um cookie contendo o identificador de sessão, o servidor usa este identificador para procurar a sessão correspondente e obter os dados do utilizador armazenados.
  6. Encerramento da sessão: A sessão pode terminar por tempo de inatividade, por logout explícito do utilizador, ou por fecho do navegador (se o cookie de sessão não tiver data de expiração).

Exemplo de uso de sessão para armazenar informações de autorização:

// Exemplo em Java Servlets
HttpSession session = request.getSession(); // Obter ou criar a sessão

// Verificar se o utilizador está autorizado
if (session.getAttribute("loggedInUser") == null) {
    // Utilizador não autorizado, redirecionar para a página de login
    response.sendRedirect("/login");
} else {
    // Utilizador autorizado, obter dados
    User user = (User) session.getAttribute("loggedInUser");
    // ... trabalhar com os dados do utilizador
}

Armazenamento de sessões:

  • Na memória do servidor (adequado para aplicações pequenas).
  • No sistema de ficheiros do servidor.
  • Em base de dados (opção clássica, escalável).
  • Em caches distribuídos (Redis, Memcached) para escalabilidade em vários servidores.

Segurança:

  • Uso de flags "secure" e "HttpOnly" para cookies de sessão.
  • Regeneração do ID de sessão após autenticação bem-sucedida.
  • Definição de um tempo limite adequado para a sessão.
  • Proteção contra sequestro de sessão (Session Hijacking).