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:
- Primeiro pedido do utilizador: O utilizador envia um pedido ao servidor web.
- 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.
- Envio do identificador ao cliente: O servidor envia este identificador de sessão ao cliente na forma de cookie (
Set-Cookie: SESSIONID=xyz; path=/). - Armazenamento no cliente: O navegador guarda este cookie e envia-o com todos os pedidos seguintes ao mesmo domínio (
Cookie: SESSIONID=xyz). - 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.
- 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).