Wiki Page Content

Come funzionano le sessioni in MoinMoin

Le sessioni in MoinMoin sono implementate usando dei gestori di sessione speciali che possono essere configurati in cfg.session_handler. In modo predefinito, viene usata un'istanza della classe MoinMoin.session.DefaultSessionHandler per la gestione delle sessioni.

Il codice che fa uso del framework per la sessione è:

  • la funzionalità del super-utente per "cambiare utente", consultare AiutoSuSuperUtente

  • la coda delle pagine visitate

Configurazione relativa alla sessione

cookie_domain

None

Dominio usato nel cookie di sessione.

cookie_path

None

Percorso usato nel cookie di sessione.

cookie_lifetime

12

=0: per sempre, ignora l'impostazione 'remember_me'; >0: n ora o per sempre se l'utente ha selezionato 'remember_me'; <0 -n ore, ignora l'impostazione 'remember_me'.

anonymous_session_lifetime

non definito

Impostare a un valore diverso da zero per abilitare le sessioni anonime (può essere anche un valore frazionario) [ore].

(!) Se viene eseguita una wiki farm e si desidera condividere il cookie di sessione tra i wiki nella farm, è utile modificare cookie_domain e/o cookie_path.

(!) Affinché gli utenti anonimi possano usufruire delle caratteristiche della sessione normale, impostare anonymous_session_lifetime.

Sostituire l'archiviazione della sessione

Se si desidera archiviare i dati di sessione in una posizione diversa rispetta la cache nel file system usata da Moin, è possibile usare DefaultSessionHandler con le diverse classi fino a DefaultSessionData. Per maggiori informazioni, consultare il file MoinMoin/session.py.

È anche possibile, ma non raccomandato, utilizzare un gestore di sessione diverso.

Codice di esempio

Per usare le variabili di sessione, un programmatore di estensioni può usare request.session come un dizionario, i valori lì archiviati sono salvati automaticamente e ripristinati se è disponibile una sessione. Sono possibili utilizzi più avanzati, consultare MoinMoin.session.SessionData nel file MoinMoin/session.py.

Ecco un esempio di macro che fa uso del codice per la sessione:

   1 # -*- coding: iso-8859-1 -*-
   2 
   3 """
   4     Tests session state.
   5 """
   6 
   7 Dependencies = ['time']
   8 
   9 def execute(macro, args):
  10     if macro.request.session.is_new:
  11         return macro.formatter.text('Not storing any state until you send a cookie.')
  12     if 'test' in macro.request.session:
  13         return macro.formatter.text("Loaded value %d" % macro.request.session['test'])
  14     import random
  15     value = random.randint(1, 100000)
  16     macro.request.session['test'] = value
  17     return macro.formatter.text("Set to value %d" % value)