Uma sessão HTTP é uma sequência de transações de requisição-resposta (request-response) de rede. Quando um usuário faz logon em um aplicativo Web, por exemplo, uma sessão HTTP é criada para acompanhar o usuário em várias solicitações.

O suporte a sessões permite registrar um número arbitrário de variáveis que serão preservadas entre as requisições. Cada novo visitante (cliente) do seu “site” recebe um identificador exclusivo, chamado ID de sessão. Isso é salvo em um cookie do lado do usuário ou propagado via URL.

Quando uma ID de sessão específica é enviada com a requisição Http, o ambiente salvo anteriormente é recriado.

Veja como funciona normalmente:

  1. Criação de Sessão: Quando um usuário faz login ou acessa um site pela primeira vez, uma ID de sessão exclusiva é criada pelo servidor.

  2. Armazenando ID de sessão: O ID de sessão exclusivo é enviado para o navegador do cliente e armazenado como um cookie. Esse ID é então enviado de volta ao servidor a cada solicitação subsequente, permitindo que o servidor reconheça o usuário.

  3. Armazenando dados do usuário: No lado do servidor, os dados do usuário associados à ID da sessão geralmente são armazenados. Isso pode incluir informações como preferências do usuário, status de autenticação ou conteúdo do carrinho de compras. Isso permite uma experiência personalizada para o usuário em diferentes páginas de um site.

  4. Expiração da sessão: As sessões não duram para sempre. Eles normalmente têm um período de tempo limite, após o qual a sessão expira. Isso ajuda na segurança, garantindo que sessões antigas ou não utilizadas não possam ser exploradas. Alguns sistemas também permitem o logout manual, que encerra a sessão.

  5. Considerações de segurança: Implementar sessões com segurança é crucial. Se um invasor obtiver a ID de sessão de um usuário, ele poderá se passar por esse usuário. Portanto, as sessões geralmente são transmitidas por HTTPS e outras medidas de segurança são aplicadas para proteger a integridade da sessão.

Por que usar sessão em desenvolvimento web

As sessões desempenham um papel crucial no desenvolvimento web, oferecendo vários benefícios importantes. Veja por que as sessões são amplamente utilizadas:

  1. Identificação do usuário entre solicitações: Sem um mecanismo de estado como sessões, os servidores Web tratam cada solicitação como um evento isolado. As sessões permitem que os servidores reconheçam os usuários em várias interações e visitas à página, proporcionando uma experiência de usuário mais coesa.

  2. Personalização: As sessões permitem que os aplicativos da Web lembrem as preferências do usuário e personalizem o conteúdo. Essa personalização pode incluir temas, configurações de idioma ou recomendações personalizadas, aumentando o envolvimento do usuário.

  3. Segurança e autenticação: Ao armazenar o status de autenticação do usuário em uma sessão, um aplicativo Web pode restringir o acesso a usuários autorizados sem exigir que eles façam login repetidamente durante uma sessão.

  4. Funcionalidade do carrinho de compras: Para sites de comércio eletrônico, as sessões podem acompanhar os itens que um usuário adicionou ao carrinho, permitindo que ele navegue pelo site e faça o checkout sem perder suas seleções.

  5. Integridade e Eficiência de Dados: As sessões armazenam dados no servidor, reduzindo a necessidade de buscar novamente dados a cada requisição. Essa abordagem mantém a integridade dos dados e pode melhorar o desempenho do aplicativo, especialmente ao lidar com grandes quantidades de dados - este uso deve ser bem modelado para evitar alta complexidade de dados salvos em sessões para controlar o fluxo de navegação, use essa estratégia apenas com features muito específicas.

  6. Facilidade de implementação: Muitas linguagens de programação e frameworks fornecem suporte interno para gerenciamento de sessão, tornando-o relativamente simples de implementar.

  7. Conformidade e Privacidade: Ao armazenar informações confidenciais do lado do servidor em sessões em vez do lado do cliente em cookies, os desenvolvedores podem manter um melhor controle sobre os dados, o que pode ser essencial para a conformidade com os regulamentos de privacidade.

  8. Analytics e Acompanhamento do Comportamento do Usuário: As sessões podem ajudar na análise do comportamento do usuário durante uma visita a um site, facilitando insights que podem orientar melhorias na experiência do usuário.

  9. Armazenamento temporário de dados: As sessões fornecem um local temporário e seguro para armazenar dados entre requisições, como dados de formulário, para que os usuários não percam suas entradas se saírem de uma página antes de enviar ao servidor - por exemplo, salvar na sessão os filtros de geração de um relatório.

  10. Compatibilidade entre plataformas: Como as sessões podem funcionar passando identificadores por URLs, elas podem ser utilizadas mesmo quando os cookies estão desativados no lado do cliente, garantindo uma compatibilidade mais ampla.

Em resumo, as sessões são uma parte fundamental do desenvolvimento web moderno, permitindo continuidade, personalização, segurança e eficiência em aplicações web. É como ter um jogador versátil no seu time de vôlei, contribuindo em vários aspectos para que o jogo flua sem problemas!

Gerenciando um carrinho de compras com sessões

Vamos dar uma olhada em um exemplo que ilustra como um carrinho de compras em um site de comércio eletrônico pode ser gerenciado usando sessões.

Por favor, note que este é um fluxo lógico, independente da linguagem de programação específica ou framework que você vai implementar.

  • Como você pode ver na imagem a seguir, não há conexão direta entre cliente e servidor devido às características stateless (sem estado) do protocolo HTTP

Repositório do cliente front-end e servidor Web de back-end
Repositório do cliente front-end e servidor Web back-end

  • Então imagine o usuário executar a ação na loja frontend que adiciona um produto ao carrinho de compras, assim o frontend faz uma requisição HTTP para a URL correta do backend, enviando o payload com informações sobre o ID do produto e quantidade para adicionar no carrinho de compras

O usuário adiciona um produto no carrinho de compras
O usuário adiciona um produto no carrinho de compras

  • Seu software, no lado do servidor (backend) pede para o servidor recuperar uma sessão existente ou criar uma nova - isto é feito com base na linguagem de programação ou framework que você está usando.

  • O servidor manipula a solicitação, se houver um sid (session id) na solicitação, o servidor procura uma sessão salva com esse código sid.

    • (YES) Se o código existir, ele recupera todas as variáveis salvas na sessão com esse sid
    • (NO) Se o código não existir, o servidor cria uma nova sessão - esta nova sessão ficará vazia

Iniciar sessão, com base em sid
Iniciar sessão, com base no sid

  • Após a sessão ser criada ou carregada, você pode manipulá-la adicionando, atualizando ou excluindo informações
  • Quando o servidor enviar a resposta Http para o cliente, ele irá incorporar o sid, assim o cliente será capaz de fazer a próxima solicitação enviando este id para o servidor recuperar todos os dados salvos naquela sessão

Resposta Http do Servidor com sid
Resposta Http do Servidor com sid

Solicitação Http do Cliente com sid
Solicitação Http do Cliente com sid

  • É importante saber que as sessões têm uma vida útil definida (por servidor, aplicativo, servidor web), se uma nova solicitação demorar muito tempo para ser feita, o ID da sessão pode ser destruído para que uma nova seja criada, vazia, e o novo sid seja enviado com a Resposta HTTP.