Atualizado: 14/12/2024

Trabalhando com Cookies - Python

Os cookies são uma forma simples e amplamente utilizada para armazenar informações do usuário no cliente. Eles ficam armazenados no dispositivo do cliente e podem ser configurados tanto pelo servidor quanto pelo próprio cliente. Como os cookies são enviados junto com cada requisição ao servidor, eles têm um limite de tamanho máximo de 4096 bytes. A seguir, abordamos como configurar e recuperar cookies em aplicações Django.

Definindo Cookies

Para enviar cookies ao cliente, o método set_cookie() da classe HttpResponse é utilizado. A assinatura do método é a seguinte:

set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None)

Os parâmetros desse método permitem configurar o comportamento dos cookies:

  • key: Nome ou identificador do cookie.

  • value: Valor associado ao cookie.

  • max_age: Tempo de vida do cookie em segundos. Pode ser um objeto timedelta, um número inteiro ou None (padrão), o que indica que o cookie será apagado ao final da sessão do navegador.

  • expires: Data e hora de expiração do cookie, podendo ser uma string no formato "Wdy, DD-Mon-YY HH:MM:SS GMT" ou um objeto datetime.datetime.

  • path: Caminho no qual o cookie será válido.

  • domain: Domínio ao qual o cookie será aplicado.

  • secure: Determina se o cookie será enviado apenas em conexões HTTPS. Quando True, o envio ocorre apenas via HTTPS.

  • httponly: Controla o acesso do JavaScript ao cookie. Configurar como True impede que scripts no cliente leiam o cookie.

  • samesite: Especifica se o cookie será enviado em requisições entre domínios. Valores possíveis:

    • 'Strict' e 'Lax': Bloqueiam o envio em requisições de outros domínios.

    • 'None': Permite o envio em requisições entre domínios (padrão).

A classe HttpResponse também fornece o método set_signed_cookie(), que adiciona criptografia ao valor do cookie. Esse método aceita os mesmos parâmetros e adiciona o argumento opcional salt, que define uma chave extra para criptografia.

Exemplo de Configuração de Cookies

O exemplo abaixo ilustra a definição de cookies no arquivo views.py:

from django.http import HttpResponse

def set_cookie(request):
    username = request.GET.get("username", "Undefined")
    response = HttpResponse(f"Hello {username}")
    response.set_cookie("username", username)
    return response

Neste exemplo, o valor do parâmetro username é extraído da query string e armazenado em um cookie chamado username. O cookie é então enviado ao cliente na resposta.

No arquivo urls.py, a função é associada à rota /set:

from django.urls import path
from hello import views

urlpatterns = [
    path("set", views.set_cookie),
]

Ao acessar a URL /set com o parâmetro username, o servidor configura o cookie, que é armazenado pelo navegador.

Acessando cookies definidos pelo servidor Django no navegador

Recuperando Cookies

Para acessar cookies não criptografados, o atributo COOKIES do objeto HttpRequest pode ser utilizado. Ele é um dicionário onde as chaves correspondem aos nomes dos cookies.

Para cookies criptografados configurados com set_signed_cookie, o método get_signed_cookie() do objeto HttpRequest é utilizado:

get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)

Os parâmetros desse método são:

  • key: Nome do cookie a ser recuperado.

  • default: Valor padrão retornado caso o cookie não seja encontrado.

  • max_age: Tempo de vida máximo do cookie em segundos.

  • salt: A mesma chave de criptografia utilizada na configuração do cookie.

Exemplo de Recuperação de Cookies

O exemplo abaixo ilustra a recuperação de cookies previamente configurados:

def get_cookie(request):
    username = request.COOKIES.get("username", "Guest")
    return HttpResponse(f"Hello {username}")

Neste exemplo, o valor do cookie username é recuperado e enviado ao cliente na resposta. Caso o cookie não exista, o valor padrão "Guest" será utilizado.

No arquivo urls.py, a função é associada à rota /get:

from django.urls import path
from hello import views

urlpatterns = [
    path("set", views.set_cookie),
    path("get", views.get_cookie),
]

Ao acessar a URL /get, o servidor retorna o valor do cookie username previamente configurado.

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com