-- Migration 022: Sitzungsgeneration je Konto -- -- Additive Migration. Der Migrator toleriert 1050/1060/1061/1062/1091. -- -- --------------------------------------------------------------------------- -- Wozu -- --------------------------------------------------------------------------- -- Ein Passwortwechsel beendete bisher keine einzige Sitzung. Wer das Passwort -- aendert, weil er einen fremden Zugriff vermutet, liess damit genau den -- drin, dessentwegen er es aendert: Dessen Cookie galt unveraendert weiter. -- -- PHP legt Sitzungen als Dateien ab; es gibt keinen Index "alle Sitzungen des -- Kontos X", ohne einen eigenen Sitzungsspeicher zu bauen. Eine Generation -- loest dasselbe Problem mit einer Spalte: Jede Sitzung merkt sich beim -- Anmelden den Stand, und bei jeder Anfrage wird verglichen. Wird der Stand -- erhoeht, passen alle uebrigen Sitzungen nicht mehr - ohne dass man sie -- einzeln finden muesste. -- -- Die eigene Sitzung uebernimmt den neuen Stand sofort. Wer sein Passwort -- aendert, soll nicht sich selbst hinauswerfen; das waere die Art von -- Nebenwirkung, wegen der Leute Passwoerter nicht aendern. -- -- --------------------------------------------------------------------------- -- Warum Vorgabe 0 und nicht ein Zeitstempel -- --------------------------------------------------------------------------- -- Ein Zaehler ist gegenueber einer Uhr im Vorteil: Er braucht keine -- Zeitzonen, keine Sekundengenauigkeit und kein Nachdenken darueber, was -- passiert, wenn zwei Aenderungen in dieselbe Sekunde fallen. Verglichen wird -- auf Gleichheit, nicht auf "juenger als". -- -- Sitzungen, die vor dieser Migration eroeffnet wurden, tragen den Wert gar -- nicht. Sie gelten weiter (siehe Auth::sessionEpochValid): Eine -- Sicherheitsverbesserung, die im Moment ihrer Einfuehrung alle Angemeldeten -- hinauswirft, wird beim naechsten Mal abgeschaltet. ALTER TABLE dc_users ADD COLUMN session_epoch INT NOT NULL DEFAULT 0 AFTER recovery_used_at;