🚀 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?

  1. 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

  1. 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:

  1. Verifique a estrutura: Certifique-se de que sua estrutura de pastas final está idêntica à mostrada abaixo.
  2. Abra o GitHub Desktop: Certifique-se de que o repositório do seu curso está selecionado no canto superior esquerdo.
  3. Visualize as alterações: Na aba Changes (à esquerda), você verá todos os arquivos que criou ou modificou nesta aula.
  4. 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).
  5. 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.
  6. ⚠️ 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.
  7. 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!

📂 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:

  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:
  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.

Capitulo Anterior | Proximo Capitulo