microdot.session — sessões por cookie assinado¶
Um armazenamento de chave/valor por utilizador suportado por um jwt num único cookie session. O JWT é assinado com um segredo conhecido apenas pela aplicação, pelo que o cliente pode ler o cookie mas não pode alterar o payload sem que o servidor o detete.
class Session¶
- class microdot.session.Session(app: Microdot | None = None, secret_key: bytes | str | None = None, cookie_options: dict | None = None)¶
- app
A instância
microdot.Microdotonde instalar. Opcional; chameinitialize()mais tarde se não for fornecida.- secret_key
Chave simétrica utilizada para assinar o JWT de sessão. Obrigatória antes de qualquer sessão ser lida ou escrita – aceder a
get()sem ela lançaValueError. Guarde-a fora do controlo de versões; numa câmara, é normalmente um ficheiro no sistema de ficheiros FAT.- cookie_options
Dict de opções passadas a
microdot.Response.set_cookie()sempre que o cookie de sessão é escrito. As predefinições definempath='/'ehttp_only=True. Adicionesecure=Truepara implementações exclusivamente HTTPS.
- initialize(app: Microdot, secret_key=None, cookie_options=None)¶
Associa a app se a construção foi adiada. secret_key / cookie_options substituem os valores do construtor se forem fornecidos.
- get(request) SessionDict¶
Devolve o dicionário de sessão para request. O dicionário é descodificado de forma lazy a partir do cookie
sessionno primeiro acesso e armazenado em cache emrequest.g._sessionpelo resto do pedido. Cookies alterados / impossíveis de assinar devolvem um dict vazio.
- encode(payload: dict, secret_key=None) str¶
Codifica payload como JWT com o segredo da sessão. Utilizado internamente; exposto para chamadores que pretendam criar tokens compatíveis.
- decode(session: str, secret_key=None) dict¶
Verifica e descodifica um valor de sessão JWT-string. Devolve
{}em qualquer falha de verificação.
- secret_key: bytes | str | None¶
O segredo de assinatura utilizado para assinar e verificar o JWT de sessão. Configurável após a construção.
Noneaté ser definido; ler a sessão sem ele lançaValueError.
- cookie_options: dict¶
O dict de opções aplicado ao cookie de sessão quando é escrito, passado a
microdot.Response.set_cookie(). As predefinições definempath='/'ehttp_only=Trueapósinitialize()ser executado.
class SessionDict¶
- class microdot.session.SessionDict(request, session_dict)¶
O objeto do tipo dict devolvido por
Session.get(). É uma subclasse dedict, pelo que todas as mutações padrão funcionam; dois métodos extra confirmam as alterações de volta na resposta.- save()¶
Escreve a sessão (possivelmente mutada) de volta na resposta como um novo cookie
session. Sem esta chamada, as edições no local são perdidas quando o pedido termina.
- delete()¶
Remove a sessão emitindo um cabeçalho de eliminação de cookie na resposta.
Decoradores ao nível do módulo¶
- microdot.session.with_session(f)¶
Decorador que passa o dicionário de sessão ao handler de rota como segundo argumento:
from microdot import Microdot from microdot.session import Session, with_session app = Microdot() Session(app, secret_key=load_secret()) @app.get('/counter') @with_session async def counter(request, session): session['n'] = session.get('n', 0) + 1 session.save() return {'n': session['n']}
O decorador não guarda automaticamente – chame
SessionDict.save()quando a sessão for modificada.
O payload da sessão em si é um dict Python regular serializado como JSON dentro do JWT. Mantenha-o pequeno: cada pedido e cada resposta transporta o cookie completo, e os JWTs não foram concebidos para armazenar objetos grandes. Para estado por utilizador superior a algumas centenas de bytes, armazene os dados no lado do servidor indexados por um identificador de sessão pequeno.