Como os Sites Sabem Que Você Está Logado? Session e Cookies na Prática
Quando você faz login em um site, fecha uma página e continua navegando normalmente, algo precisa informar ao sistema que você já foi autenticado.
Mas como isso acontece?
Como o servidor sabe que você é você em cada nova requisição?
Muitos iniciantes imaginam que o navegador envia usuário e senha o tempo todo, mas não é assim que funciona.
Neste artigo vamos entender como Session e Cookies trabalham juntos para permitir autenticação em aplicações Node.js utilizando Express Session.
O problema que precisa ser resolvido
HTTP é um protocolo sem estado (stateless).
Isso significa que cada requisição enviada ao servidor é independente da anterior.
Imagine o seguinte cenário:
- Você faz login.
- O servidor valida suas credenciais.
- Você acessa outra página.
Como o servidor sabe que aquele usuário já fez login anteriormente?
Se nada fosse armazenado, o sistema pediria autenticação a cada clique.
É justamente aí que entram as Sessions e os Cookies.
O que é uma Session?
A Session é um espaço de armazenamento mantido pelo servidor.
Após o login, o servidor cria uma sessão contendo informações importantes do usuário.
Por exemplo:
req.session.usuario = {
id: 1,
nome: "Administrador",
email: "admin@email.com"
};
Esses dados permanecem no servidor.
O navegador não recebe essas informações diretamente.
O que é um Cookie?
O Cookie funciona como uma identificação.
Em vez de enviar todos os dados do usuário para o navegador, o servidor envia apenas um identificador único.
Algo parecido com isto:
connect.sid=abc123xyz
Esse valor é armazenado no navegador.
Sempre que uma nova requisição é feita, o navegador envia automaticamente esse identificador.
O servidor recebe o identificador e procura a sessão correspondente.
Se encontrar, sabe exatamente qual usuário está realizando a requisição.
Pensando de forma simples
Imagine um guarda-volumes.
O servidor guarda todos os seus objetos.
Você recebe apenas uma chave.
Quando retorna, apresenta a chave e recupera seus dados.
A Session é o guarda-volumes.
O Cookie é a chave.
Configurando Session no Node.js
No projeto utilizamos o middleware Express Session.
Primeiro instalamos a biblioteca:
npm install express-session
Depois configuramos:
app.use(session({
secret: "minha-chave-secreta",
resave: false,
saveUninitialized: false,
cookie: {
maxAge: 1000 * 30
}
}));
O que significa cada propriedade?
secret
Utilizada para assinar a sessão.
Nunca deve ficar exposta diretamente no código.
O ideal é armazenar em variáveis de ambiente.
resave
Define se a sessão deve ser salva novamente mesmo sem alterações.
saveUninitialized
Evita criar sessões vazias sem necessidade.
cookie.maxAge
Define por quanto tempo a sessão ficará válida.
No exemplo:
1000 * 30
A sessão expira após 30 segundos.
Criando o Login
Após validar usuário e senha, criamos a sessão:
req.session.usuario = {
id: usuario.id,
nome: usuario.nome,
email: usuario.email
};
Se tudo estiver correto:
return res.json({
mensagem: "Login realizado com sucesso"
});
Caso contrário:
return res.status(401).json({
mensagem: "Usuário ou senha inválidos"
});
Observe que a mensagem não informa qual campo está incorreto.
Isso é uma prática importante de segurança.
Protegendo Rotas com Middleware
Depois do login precisamos impedir que usuários não autenticados acessem determinadas áreas.
Criamos então um middleware:
function protegerRota(req, res, next) {
if (!req.session.usuario) {
return res.status(401).json({
mensagem: "Acesso negado"
});
}
next();
}
Agora basta utilizá-lo:
app.get(
"/api/protegida",
protegerRota,
(req, res) => {
res.json({
mensagem: "Rota protegida"
});
}
);
Se a sessão não existir, o acesso será bloqueado.
O que acontece quando a Session expira?
No projeto configuramos:
cookie: {
maxAge: 1000 * 30
}
Após 30 segundos sem uma sessão válida, o usuário perde a autenticação.
Ao tentar acessar novamente uma rota protegida, receberá:
{
"mensagem": "Acesso negado"
}
Essa é uma forma simples de controlar o tempo de permanência do usuário autenticado.
Como funciona o Logout?
Fazer logout significa destruir a sessão e remover o cookie associado.
No Express Session podemos fazer assim:
req.session.destroy(() => {
res.clearCookie("connect.sid");
res.json({
mensagem: "Logout realizado com sucesso"
});
});
Dessa forma:
- A sessão é removida do servidor.
- O cookie é apagado do navegador.
- O usuário perde acesso às rotas protegidas.
Session x JWT
Uma dúvida comum é:
Qual a diferença entre Session e JWT?
Session
- Dados ficam armazenados no servidor.
- Cookie guarda apenas um identificador.
- Mais simples para aplicações tradicionais.
- Fácil controle de logout.
JWT
- Dados ficam dentro do token.
- Token normalmente é armazenado no navegador.
- Não depende de armazenamento de sessão no servidor.
- Muito utilizado em APIs e arquiteturas distribuídas.
Nenhuma solução é melhor em todos os cenários.
Cada uma resolve problemas diferentes.
Conclusão
Quando você faz login em um sistema, o servidor cria uma sessão contendo suas informações.
O navegador recebe apenas um identificador armazenado em um Cookie.
A cada nova requisição, esse identificador é enviado automaticamente, permitindo que o servidor reconheça quem está acessando a aplicação.
Com isso conseguimos:
- Fazer login
- Proteger rotas
- Controlar expiração de sessão
- Implementar logout
- Gerenciar autenticação de forma segura
Entender Session e Cookies é um passo fundamental para compreender como aplicações web reais funcionam por trás das telas.
Assista à aula
🎥 Como os Sites Sabem Que Você Está Logado? Session e Cookies na Prática
Neste vídeo você aprende na prática como funciona a autenticação utilizando Session e Cookies no Node.js com Express Session.
📺 Vídeo editado:
Quer acompanhar o desenvolvimento completo?
Se você prefere ver todo o processo de construção do projeto, incluindo os testes, explicações extras e dúvidas respondidas durante a transmissão, assista à live completa:
📺 Live completa:
No vídeo mostramos toda a implementação utilizando Node.js, Express Session e autenticação na prática.


