TurboGears - Cookie e sessioni

Spesso è necessario conservare semplici dati di navigazione allegati al browser di un utente. Le sessioni sono la tecnica più comunemente usata. La sessione rappresenta i dati che non devono essere archiviati in una forma più persistente come file su disco o database.

Tuttavia, i dati di sessione in TurboGears possono essere supportati da valori di file system, database o cookie con hash. Una piccola quantità di dati di sessione viene generalmente conservata nei cookie, ma per il volume maggiore di dati di sessione viene utilizzato MemCache.

MemCache è un demone a livello di sistema. Fornisce un accesso rapido ai dati memorizzati nella cache ed è estremamente scalabile. Tuttavia, è inteso per l'uso solo su server sicuri e quindi deve essere mantenuto e protetto dall'amministratore di sistema.

Becher nella gestione delle sessioni

TurboGears utilizza Beaker per la gestione delle sessioni. Un progetto avviato rapidamente da Gearbox è configurato per impostazione predefinita per utilizzare cookie con hash per memorizzare i dati della sessione.

Ogni volta che un client si connette, il middleware della sessione (Beaker) ispezionerà il cookie utilizzando il nome del cookie, che è stato definito nel file di configurazione. Se il cookie non viene trovato, verrà impostato nel browser. In tutte le visite successive, il middleware troverà il cookie e lo utilizzerà.

Per abilitare la gestione della sessione, la classe di sessione dovrebbe essere incorporata nel progetto seguendo l'istruzione import:

from tg import session

Per salvare i dati in una variabile di sessione -

session[‘key’] = value
session.save()

Per recuperare la variabile di sessione -

return session[‘key’]

Nota che devi salvare esplicitamente la sessione affinché le tue chiavi vengano memorizzate in quella sessione.

Il delete() il metodo dell'oggetto sessione cancellerà tutte le sessioni utente -

session.delete()

Anche se non è consuetudine eliminare tutte le sessioni utente in un determinato ambiente di produzione, in genere lo farai per la pulizia dopo che sono stati eseguiti test di usabilità o funzionali.

Di seguito è riportato un semplice esempio per dimostrare le sessioni. La classe RootController ha un'estensionesetsession() metodo che imposta una variabile di sessione.

from hello.lib.base import BaseController
from tg import expose, session
class RootController(BaseController):
   
   @expose()
   def setsession(self):
      session['user'] = 'MVL'
      session.save()
      
      str = "<b>sessionVariable set to "+session['user'] 
      str = str+"<br><a href = '/getsession'>click here to retrieve</a></b>"
      return str
   
   @expose()
   def getsession(self):
      return "<b>value of session variable retrieved " +session['user'] +"</b>"

accedere http://localhost:8080/setsession

Un collegamento nel browser porta a http://localhost:8080/getsession che recupera e visualizza la variabile di sessione -