Die Abmeldung hat weiterhin nicht ausgeloest. Zwei Gruende, beide fuer sich
ausreichend:
* **save_session** schreibt ``idle_expires_at`` bei jeder Anfrage, die die
Sitzung anfasst -- ein neu erzeugtes CSRF-Token genuegt. Die Pruefung in
``open_session`` lief damit ins Leere. Sitzungsdaten werden weiter
gespeichert, nur die Fristen bleiben stehen. Dieselbe Stelle benutzte
ausserdem ``idle_minutes`` statt der einstellbaren Zeit; bei der Vorgabe von
dreissig Minuten fiel das nicht auf.
* **Der Kopf allein reicht nicht.** Er setzt voraus, dass der Browser das
aktuelle Skript faehrt -- ein Tab, der seit gestern Abend offen ist, faehrt
das alte und schickt ihn nicht. Genau dieser Tab ist der Fall, um den es
geht. Der Server weiss es ohne Zutun des Browsers: die Endpunkte, die eine
Kachel oder ein Protokoll nachlaedt, sind als Aktualisierungsausschnitt
gekennzeichnet (``@fragment``) und gelten damit immer als automatisch.
``request.endpoint`` steht in ``open_session`` noch nicht -- Flask oeffnet
die Sitzung vor dem Routing --, deshalb sieht die Erkennung dort selbst nach.
Dass es auf dem Lizenzserver zuverlaessig funktionierte, war der Hinweis: dort
pollt keine Kachel.
Dazu ein Kopf ``X-Session-Expired`` fuer Seiten, die auch oeffentlich
antworten. Die Statusuebersicht liefert nach dem Ablauf eine 200 mit den
oeffentlichen Kacheln -- am Status ist der Verlust der Sitzung also nicht zu
erkennen, und der offene Tab zeigte weiter eine Oberflaeche, als sei alles in
Ordnung. Jetzt laedt er neu und zeigt die Anmeldemaske.
Version 2.0.4.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>