it-swarm.com.de

Alte Sitzungen werden nicht automatisch aus der Datenbank gelöscht

Ich verwende eine 3.8.5-Site mit ziemlich viel Verkehr. Aufgrund einiger kürzlich aufgetretener Probleme ist mir aufgefallen, dass die Tabelle __session Nicht automatisch aufgeräumt wird.

Die Sitzungsdauer ist auf 1 Stunde (60 Minuten) festgelegt. Als ich jedoch feststellte, dass ein Problem aufgetreten ist, wurden Sitzungen in der Datenbank gespeichert, die älter als ein Monat waren. Ich habe die __session - Tabelle vor vier Stunden abgeschnitten und sie enthält Sitzungen, die vier Stunden alt sind, sodass die Garbage Collections anscheinend nicht richtig funktionieren.

Ich kann den genauen Zeitstempel der ältesten Sitzung nicht genau bestimmen, bevor ich die __session - Tabelle abgeschnitten habe, aber ich glaube, es war der 30./31. Januar 2018. Dies könnte ein Zufall sein, würde es aber sein korrelieren mit der Version 3.8.4, die diese Pull-Anforderung enthält, die ändert, wie Sitzungen bereinigt werden.

Wie kann ich sicherstellen, dass Datenbanksitzungen, die älter als "Sitzungsdauer" sind, korrekt gelöscht werden?.

5
Dom

Ich habe eine Lösung gefunden, nachdem ich die verschiedenen Pull-Anfragen auf GitHub gelesen habe, wie oben von Adam Gatt und Drew G. ausgeführt.

In der Zusammenfassung der Änderungen für github.com/joomla/joomla-cms/pull/19548 heißt es, dass die Sitzungsdaten der Datenbank gemäß dem Zeitplan gelöscht werden, der durch die probabilistische Garbage Collection der PHP-Sitzung festgelegt wurde. Als ich meine PHP Konfiguration überprüfte, stellte ich fest, dass das session.gc_probability -Variable wurde auf Null gesetzt, sodass die Garbage Collection für Sitzungen niemals ausgeführt werden würde. Das Ändern dieses Werts auf 1 (mit einem Divisor von 1000) hat dazu geführt, dass die Sitzungstabelle regelmäßig bereinigt wird.

Ich werde diese Antwort nicht als richtig markieren, da ich denke, dass die Antwort von Adam Gatt, die einen Wechsel von der Datenbank als Session-Handler vorschlägt, gleichermaßen gültig ist. Auch Drew Gs Bemerkung über das Ändern des Session-Handlings in der kommenden Joomla-Veröffentlichung wird dies wahrscheinlich sowieso irrelevant machen.

5
Dom

Ich glaube, dass mit der Veröffentlichung von Version 3.8.4 Änderungen an Joomla vorgenommen wurden und dass die Sitzungstabelle nicht mehr gelöscht wird, wenn 'Database' als Sitzungshandler verwendet wird.

Siehe dies Seite auf Github .

Die Empfehlung war, den Session-Handler von 'Database' auf 'PHP' zu ändern. Um diese Einstellung zu ändern, melden Sie sich im Backend der Website an. Rufen Sie das Menü System -> Globale Konfiguration auf. Navigieren Sie zur Registerkarte System und scrollen Sie nach unten zur Überschrift Sitzungseinstellungen. Wählen Sie PHP aus der Dropdown-Liste für die Option Session Handler.

6
Adam Gatt