##master-page:HelpTemplate
##master-date:Unknown-Date
#format wiki
#language pt
= Como funcionam as sessões no MoinMoin =

As sessões no [[WikiMoinMoin|MoinMoin]] são implementadas utilizando a framework de autenticação. Para mais detalhes, consulte o tópico AjudaNaAutenticação. Por omissão, a função `MoinMoin.auth.moin_session` encontra-se na lista `config.auth` e é responsável pela gestão das sessões. Pode utilizá-la com qualquer outro método de autenticação, se necessitar de sessões.

Como um programador, de forma a utilizar variáveis de sessões, pode utilizar a `request.session` como um dicionário. Os valores aí armazenados serão guardados automaticamente e restaurados se uma sessão estiver disponível.

O código que utiliza a framework da sessão inclui actualmente:
 * a funcionalidade de "alterar utilizador" do super utilizador, veja o tópico AjudaComSuperUtilizadores
 * o rasto das páginas visitadas

== Sessões anónimas ==

As sessões anónimas são suportadas, ao incluir a função `MoinMoin.auth.moin_anon_session` no `config.auth` e configurando o `config.anonymous_cookie_lifetime`. As cookies das sessões anónimas expiram após as horas definidas em `config.anonymous_cookie_lifetime` (pode ser parcial), no entanto, o acto de expirar não é verificado. O estado guardado é removido uma hora depois da cookie de sessão expirar.

== Substituir moin_session ==
É possível substituir o `moin_session` na lista de configuração `auth`. A autenticação que lidar com a nova sessão deve pedir o `request.session` baseado numa cookie ou em outros dados. O objecto `request.session` tem de ser um objecto do tipo dicionário e deve implementar a duração dos dados de sessão, cf. `MoinMoin.auth.SessionData`.

== Exemplo de código de sessão ==

Eis um exemplo de macros, utilizando o código de sessão:
{{{
#!python
# -*- coding: iso-8859-1 -*-

"""
    Testa o estado da sessão.
"""

Dependencies = ['time']

def execute(macro, args):
    if 'test' in macro.request.session:
        return macro.formatter.text(macro.request.session['test'])
    import random
    value = random.randint(1, 100000)
    macro.request.session['test'] = value
    return macro.formatter.text("set to value %d" % value)
}}}
