Logout im Frontend nicht möglich weil Browser Logoutseite cacht
Ein Besucher machte mich darauf aufmerksam, das er sich auf schachbund.de nicht mehr abmelden kann. Er hatte sich kurz angemeldet und wollte sich danach sofort wieder abmelden. Ich konnte es zuerst nicht nachvollziehen, dann aber doch. Und zwar mit diesem Szenario:
Anmelden (mit angemeldet bleiben), Abmelden, alles okay, Anmelden (mit angemeldet bleiben), Abmelden, immer noch angemeldet
Der erste Abmeldeversuch gelingt, der zweite nicht mehr, weil die Abmeldeseite jetzt im Browsercache ist und kein Request mehr an den Server geschickt wird. Geprüft mit Firefox und Chrome. Und dabei ist das Caching der Abmeldeseite und aller anderen Mitgliederseiten komplett abgeschaltet in den Seiteneinstellungen.
Ich habe Claude die Informationen gegeben und da kam folgende Analyse:
Zitat:
Das ist ein bekannter Contao-Bug.
Warum die Seite trotz „Caching verboten" gecacht wird
Contao schickt für die Abmeldeseite standardmäßig Cache-Control: private. Das klingt nach „nicht cachen", bedeutet aber laut HTTP-Spezifikation nur: kein gemeinsamer Cache (Proxy/CDN) darf speichern – der Browser-Cache als privater Cache darf sehr wohl. Genau das ist der Denkfehler. Nötig wäre no-store.
Das Ganze ist seit Jahren als Issue dokumentiert (
contao/contao#1032), und die dortige Reproduktionsanleitung ist der obige Testablauf: anmelden, abmelden, wieder anmelden, erneut abmelden – die Weiterleitung wird korrekt ausgeführt, aber der Benutzer wird nicht abgemeldet, weil Chrome/Firefox die Seite aus dem Cache holt. Der Fix im Issue: der RedirectResponse in PageLogout.php bekommt zusätzlich den Header Cache-Control: no-store, no-cache, must-revalidate.
Ich hatte Claude nicht mitgeteilt welche Contao-Version ich habe. Und jetzt ist gerade mein 5-Stunden-Limit erreicht. :D Wahrscheinlich bekomme ich nachher eine genaue Anleitung wie ich Version 4.13.58 fixen kann.
Das Problem ist mir übrigens noch nie aufgefallen und es hat sich auch noch nie jemand in all den Jahren beschwert, das Abmelden nicht möglich ist. Aber so eine schnelle Abfolge "Anmelden, abmelden, anmelden, abmelden, kaputt" kommt auch nicht so häufig vor.