🚀 Capítulo 08: Camadas de Dados
NOTE
Este capítulo utiliza a temática de Inception (A Origem) para explicar o conceito de Sessões e Cookies em aplicações Web. Aprenda a manter o usuário conectado mesmo mudando de página!
🎯 Objetivo da Aula
Compreender a diferença entre Sessões e Cookies, entendendo como as aplicações web modernas guardam o estado do usuário (como o login) enquanto ele navega por diferentes páginas ou rotas.
🏢 O Cenário Prático (Seu Desafio)
No filme Inception, os personagens entram em sonhos dentro de sonhos (várias camadas). Para não se perderem e saberem quem eles são de verdade em qualquer camada, eles usam um “totem” (um objeto pequeno que guarda a informação da realidade).
Na web comum, o protocolo HTTP é “desmemoriado” (stateless). Isso significa que quando você clica em um link e vai para outra página do mesmo site, o servidor esquece completamente quem você é! É como se você mudasse de camada de sonho e esquecesse o seu nome.
- Para resolver isso, os servidores usam as Sessões e os Cookies como os nossos totens! Eles guardam quem você é (se está logado, o que tem no seu carrinho) enquanto você muda de página. Seu desafio é entender como essa memória funciona!
🧠 Fundamentos: A Teoria Traduzida
🧠 1. Sessões:
Os dados ficam guardados no servidor. É muito seguro porque o usuário não pode alterar os dados no computador dele. A sessão “morre” assim que o usuário fecha o navegador ou o tempo expira. O servidor apenas envia um ID de sessão para o navegador.
🍪 2. Cookies:
Os dados ficam guardados no computador do usuário (no navegador). O usuário pode ver e alterar. Eles têm uma data de validade e continuam lá mesmo se o computador for reiniciado. São usados para lembrar preferências (como o modo escuro do site).
📖 Exemplo Guiado: Simulando uma Sessão em Python
Como o FastAPI (que veremos mais à frente) foca muito em APIs onde o cliente guarda o estado, vamos simular como um servidor guarda dados de sessão em um dicionário simples:
# Simulando o banco de dados de sessões do servidor
sessoes_ativas = {}
def criar_sessao(usuario_id, nome_usuario):
# Gera um ID de sessão fictício
id_sessao = f"totem_{usuario_id}"
sessoes_ativas[id_sessao] = {"nome": nome_usuario, "camada": 1}
return id_sessao
def acessar_camada(id_sessao):
if id_sessao in sessoes_ativas:
sessoes_ativas[id_sessao]["camada"] += 1
print(
f"Usuário {sessoes_ativas[id_sessao]['nome']} desceu para a camada {sessoes_ativas[id_sessao]['camada']}"
)
else:
print("Sessão inválida! Acorde!")
# O usuário faz login
meu_totem = criar_sessao(1, "Cobb")
# O usuário navega
acessar_camada(meu_totem)
acessar_camada(meu_totem)🛠️ Prática Obrigatória 1: Onde Guardar?
- Você está criando o carrinho de compras de um e-commerce. Para garantir que o usuário não altere os preços dos produtos salvos no carrinho pelo navegador dele, onde você deve guardar essa lista de produtos (no servidor ou no navegador)? Por quê?
🛠️ Prática Obrigatória 2: Cookies
- Qual é a principal desvantagem de guardar informações sensíveis (como senhas ou privilégios de administrador) diretamente em Cookies no navegador do usuário?
📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
Neste curso, você entregará suas atividades enviando o código para o seu repositório no GitHub usando o aplicativo GitHub Desktop. Siga o passo a passo detalhado:
- Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
- Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
- Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
- Faça o Commit:
- No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex:
Finaliza atividades do Capítulo. - Clique no botão azul Commit to main (ou o nome da sua branch).
- No campo Summary (na parte inferior esquerda), digite uma mensagem curta descrevendo o que fez, ex:
- Envie para a Nuvem (Push): No topo da tela, clique no botão Push origin. Isso enviará seu código do seu computador para o seu perfil no GitHub.
- ⚠️ IMPORTANTE (Repositório Público): Para que o professor consiga corrigir, o seu repositório no GitHub DEVE SER PÚBLICO. Repositórios privados não podem ser visualizados por quem não foi convidado.
- Como entregar no Microsoft Teams:
- Copie o link do seu repositório no GitHub (ex:
https://github.com/seu-usuario/seu-repositorio). - Abra a tarefa correspondente no Microsoft Teams.
- Clique no botão Adicionar trabalho (ou Add work).
- Selecione a opção Link no menu lateral.
- Cole o link do GitHub no campo “Endereço Web” e digite um texto (ex:
Meu Repositório) no campo “Texto a ser exibido”. - Clique em Anexar.
- MUITO IMPORTANTE: Clique no botão Entregar (ou Turn in) no canto superior direito para concluir o envio!
- Copie o link do seu repositório no GitHub (ex:
📂 Estrutura de Pastas
spec_backend_com_python_e_fastapi/
├── capitulos/
│ └── capitulo_08_inception.md💡 Checkpoint de Lógica
Nas APIs modernas que usaremos com FastAPI, o servidor geralmente não guarda sessões. Ele envia um Token criptografado (JWT) para o usuário, e o usuário precisa enviar esse token de volta a cada requisição. Veremos isso no Capítulo 19!
🔥 Desafio de Fixação (Opcional)
Pesquise como ler um Cookie usando a biblioteca padrão do Python (módulo http.cookies).
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Deve guardar no Servidor (usando Sessões). Como os dados ficam guardados de forma segura no servidor, o usuário não consegue burlar o sistema alterando os valores. Se guardássemos no navegador (Cookies), um usuário mal-intencionado poderia alterar o preço do produto no arquivo do computador dele. Gabarito da Prática 2:
- A principal desvantagem é a falta de segurança. Os cookies ficam visíveis e podem ser facilmente alterados pelo usuário através das ferramentas do desenvolvedor do navegador.