Sessions in der Datenbank
Diese Seite richtet sich an Datenbankadministratoren, die entscheiden, ob eine Exponential-Website ihre Sessions in der
Datenbank hält, und die die Tabelle ezsession betreuen, wenn sie das tut. Sie beantwortet: welcher Handler Sessions wo hält,
was die Tabelle enthält, wie abgelaufene Zeilen entfernt werden und was sich mit mehreren Webservern ändert. Quelle:
Sessions und settings/site.ini [Session].
Inhalt
- Zwei Handler
- Die Tabelle ezsession
- Auf den Datenbank-Handler umstellen
- Abgelaufene Sessions entfernen
- Anonyme Sessions und ForceStart
- Mehrere Webserver
- Checkliste
Zwei Handler
site.ini [Session] Handler entscheidet:
| Wert | Wo Sessions gehalten werden | Administration |
|---|---|---|
leer (der Standard): ezpSessionHandlerPHP | PHPs eigener Session-Speicher (session.save_handler, meist Dateien auf dem Webserver) | Setup > Sitzungen zeigt jüngste Anmeldungen aus ezuservisit, kann aber keine Sessions auflisten oder entfernen |
ezpSessionHandlerDB | die Tabelle ezsession der Datenbank der Website | Setup > Sitzungen listet, zählt und entfernt Sessions |
Eine Session endet [Session] SessionTimeout Sekunden nach ihrer letzten Verwendung (Standard 31104000, 360 Tage). Mit dem
PHP-Handler entfernt PHP abgelaufene Sessions selbst (session.gc_maxlifetime, das Exponential auf SessionTimeout setzt).
ezuservisit (letzter Besuch, Zahl der Anmeldungen, fehlgeschlagene Versuche) wird mit beiden Handlern geführt.
Die Tabelle ezsession
Aus kernel/sql/mysql/kernel_schema.sql:
| Spalte | Bedeutung |
|---|---|
session_key | der Primärschlüssel (32 Zeichen) |
expiration_time | wann die Session endet; indiziert |
user_id | der angemeldete Benutzer oder der anonyme Benutzer; indiziert |
user_hash | ein an den Benutzer gebundener Hash |
data | die serialisierten Session-Daten |
Session-Schlüssel sind Zugangsdaten: Wer einen hat, ist als dieser Benutzer angemeldet. Behandeln Sie die Tabelle wie einen
Passwortspeicher; die Administration zeigt die Schlüssel nie, nur einen kurzen Verweis. Der SQL-Abfrage-Cache speichert
Lesezugriffe auf ezsession nie (querycache.ini ExcludeTables[]=ezsession).
Auf den Datenbank-Handler umstellen
# settings/override/site.ini.append.php
[Session]
Handler=ezpSessionHandlerDBphp bin/php/ezcache.php --clear-tag=ini --allow-root-user
./console exp:velocity deploy --allow-root-userAlle melden sich einmal neu an: Von PHP gehaltene Sessions werden nicht übernommen. Der Änderungshinweis ezpSessionHandlerDB unter PHP 8 behandelt eine Korrektur an diesem Handler.
Abgelaufene Sessions entfernen
Mit dem Datenbank-Handler bleiben abgelaufene Zeilen in ezsession, bis etwas sie entfernt:
Setup > Sitzungen, Abgelaufene / alte Sitzungen entfernen: entfernt die abgelaufenen Zeilen und die Warenkörbe, die sie hinterlassen; niemand wird abgemeldet.
php bin/php/ezsessiongc.php(exp:ezsessiongc): dasselbe aus einer Shell, "as defined by site.ini[Session]SessionTimeout".cronjobs/session_gc.php: das Cronjob-Skript. Kein Teil der mitgeliefertensettings/cronjob.iniführt es aus; fügen Sie es in Ihrem Override einem Teil hinzu:# settings/override/cronjob.ini.append.php [CronjobPart-infrequent] Scripts[]=session_gc.php
Achten Sie auf die Zahl "abgelaufen, aber noch in der Tabelle" unter Setup > Sitzungen: Sie ist rot, wenn es welche gibt.
Anonyme Sessions und ForceStart
[Session] ForceStart=enabled öffnet für jeden anonymen Besucher eine Session. Mit dem Datenbank-Handler schreibt das für
jeden Besuch eine Zeile; setzen Sie es nur, wenn anonyme Besucher gezählt werden müssen, und bemessen Sie die Tabelle und ihr
Aufräumen dafür.
Mehrere Webserver
Mit dem PHP-Handler kennt jeder Webserver nur seine eigenen Sessions. Auf mehreren Servern halten Sie Sessions entweder in der Datenbank (jeder Server liest dieselbe Tabelle) oder leiten jeden Benutzer anhand des Session-Cookies an einen Server (Mehrere Webknoten, Sessions). SQLite kann nicht die Datenbank einer Website mit mehreren Servern sein, Datenbank-Sessions bedeuten dort also eine Server-Engine.
Checkliste
- To do: Der Handler ist bewusst gewählt: PHP-Dateien auf einem Server, die Datenbank für mehrere.
- To do: Mit dem Datenbank-Handler läuft
session_gc.phpaus einem Teil oderezsessiongc.phpaus Cron. - To do:
ForceStartbleibt ausgeschaltet, sofern keine anonymen Sessions gebraucht werden. - To do: Sicherungen von
ezsessionwerden als Geheimnisse behandelt, oder die Tabelle wird aus Kopien für andere herausgelassen.
Verwandte Seiten
- Sessions: wer angemeldet ist
- Aufräumen: Cronjobs und Warteschlangentabellen
- 13.7 Sessions und Cookies
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.