TurboGears - Cookies & Sitzungen

Es ist häufig erforderlich, einfache Browserdaten zu speichern, die an den Browser eines Benutzers angehängt sind. Sitzungen sind die am häufigsten verwendete Technik. Sitzung stellt Daten dar, die nicht in einer dauerhafteren Form wie Festplattendatei oder Datenbank gespeichert werden müssen.

Sitzungsdaten in TurboGears können jedoch durch Dateisystem-, Datenbank- oder Hash-Cookie-Werte gesichert werden. Eine kleine Menge von Sitzungsdaten wird im Allgemeinen in Cookies gespeichert, aber für das größere Volumen von Sitzungsdaten wird MemCache verwendet.

MemCache ist ein Daemon auf Systemebene. Es bietet schnellen Zugriff auf zwischengespeicherte Daten und ist extrem skalierbar. Es ist jedoch nur für die Verwendung auf sicheren Servern vorgesehen und muss daher von sysadmin gewartet und gesichert werden.

Becher in der Sitzungsverwaltung

TurboGears verwendet Beaker für das Sitzungsmanagement. Ein vom Getriebe schnell gestartetes Projekt ist standardmäßig so konfiguriert, dass Hash-Cookies zum Speichern von Sitzungsdaten verwendet werden.

Jedes Mal, wenn ein Client eine Verbindung herstellt, überprüft die Sitzungs-Middleware (Becher) das Cookie anhand des Cookie-Namens, der in der Konfigurationsdatei definiert wurde. Wird das Cookie nicht gefunden, wird es im Browser gesetzt. Bei allen nachfolgenden Besuchen findet die Middleware das Cookie und verwendet es.

Um die Sitzungsverwaltung zu aktivieren, sollte die Sitzungsklasse durch folgende Importanweisung in das Projekt aufgenommen werden:

from tg import session

So speichern Sie die Daten in einer Sitzungsvariablen:

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

So rufen Sie die Sitzungsvariable ab:

return session[‘key’]

Beachten Sie, dass Sie die Sitzung explizit speichern müssen, damit Ihre Schlüssel in dieser Sitzung gespeichert werden.

Das delete() Methode des Sitzungsobjekts löscht alle Benutzersitzungen -

session.delete()

Obwohl es nicht üblich ist, alle Benutzersitzungen in einer bestimmten Produktionsumgebung zu löschen, werden Sie dies normalerweise zur Bereinigung tun, nachdem Usability- oder Funktionstests durchgeführt wurden.

Im Folgenden finden Sie ein einfaches Beispiel zur Demonstration von Sitzungen. Die RootController-Klasse hat einesetsession() Methode, die eine Sitzungsvariable festlegt.

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>"

Eingeben http://localhost:8080/setsession

Ein Link im Browser führt zu http://localhost:8080/getsession welches die Sitzungsvariable abruft und anzeigt -