Session Management – Datei basiert, mit Memcache und mit JSON-Token

Sessions in der Datenbank – The dirty way

Euer erster Lösungsansatz als ihr „Webcluster“ gelesen habt war möglicherweise die Datenbank. Klar sie ist von allen Servern aus erreichbar und egal wie sie aufgebaut ist – Cluster, Master-Slave, … – liefert sie konsistente Daten ohnehin schon die ganze Zeit, warum nicht auch für Sessions verwenden.

Natürlich geht das. Alles was ihr braucht ist einen eigenen Session-Handler. Der könnte zum Beispiel so aussehen:

Die zugehörige Tabelle sähe so aus:

Engine und Charset könnt ihr nach euren Gegebenheiten anpassen und longtext für data ist möglicherweise auch übertrieben. Hier müsst ihr selbst entscheiden, welche Datenmengen ihr erwartet.

Anstatt einem session_start(); macht ihr jetzt new Session($dbConnection); Der Rest bleibt gleich.

Die Probleme mit Sessions in der Datenbank sind aber leider auch sehr deutlich. Eine Session wird bei jedem Request sowohl geladen als auch gespeichert und sie enthält für jeden Benutzer andere Daten. Ihr habt also sehr viele Schreibzugriffe (generell schlecht für eine Datenbank) mit sich ständig ändernden Daten (Cache wird invalidiert). Da ohnehin jeder Benutzer eine eigene Session hat, ergeben sich auch keine Möglichkeiten für effizientes Caching.

Aufgrund der erwähnten Performanceprobleme rate ich euch von einer Datenbanklösung dringend ab!

Vorteile die Session in der Datenbank zu speichern

  • Die Datenbank ist als Speichermedium sowieso vorhanden
  • Keine „Cluster-Problematik“

Nachteile die Datenbank mit der Session zu behelligen

  • Performance!
  • Overhead durch Netzwerkabfragen
  • Nicht trivial umzusetzen

Weiter mit Sessions mit Memcache