session cookie
Blog

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:

  1. Você faz login.
  2. O servidor valida suas credenciais.
  3. 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:

  1. A sessão é removida do servidor.
  2. O cookie é apagado do navegador.
  3. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *