Die abgelaufenen Sessions sollten automatisch entfernt werden. Funktioniert jedenfalls bei mir einwandfrei.
Du kannst den 'sessions' table problemlos leeren. Das schlimmste was passiert, ist, dass angemeldete User ausgelogged werden.
Vielen Dank! Ich werde das mal im Auge behalten, ob die Sessions in zukunft automatisch gelöscht werden.
Ja, komisch.
Ich hab´ das mal eben bei der installierten 0.5-RC Testversion überprüft.
Es tritt genau dieser Effekt auf.
Rosali, das scheint mir nicht ganz koscher...
Rgds.
PHP.net
Quotegc
Der Speicherbereiniger (garbage collector) wird ausgeführt, wenn der Session-Speicherbereiniger ausgeführt wird. Er erwartet die maximale Session-Verfallszeit als einzigen Parameter.
Der Garbage Collector kann benuterdefiniert festgelegt werden.
Quotebool session_set_save_handler ( callback $open , callback $close , callback $read , callback $write , callback $destroy , callback $gc )
Das erfolgt in rcube_session.php:
// set custom functions for PHP session management
session_set_save_handler(
array($this, 'open'),
array($this, 'close'),
array($this, 'read'),
array($this, 'write'),
array($this, 'destroy'),
array($this, 'gc'));
}
Die Garbage Collector funktion sieht folgendermaßen aus:
// garbage collecting function
public function gc($maxlifetime)
{
... hier räumt er die Tabelle auf
// just delete all expired sessions
$this->db->query(
sprintf("DELETE FROM %s WHERE changed < %s",
get_table_name('session'), $this->db->fromunixtime(time() - $maxlifetime)));
... und hier löscht er alte Files aus dem Temp Verzeichnis.
foreach ($this->gc_handlers as $fct)
$fct();
return true;
}
Der Aufruf der Funktion erfolgt durch PHP entsprechend den Definition in der php.ini:
; Define the probability that the 'garbage collection' process is started
; on every session initialization.
; The probability is calculated by using gc_probability/gc_divisor,
; e.g. 1/100 means there is a 1% chance that the GC process starts
; on each request.
session.gc_probability = 1
session.gc_divisor = 100
Die Grundeinstellung ist, dass im Ergebnis bei jedem 100. Login der Garbage Collector aufgerufen wird. Wenn also nur wenige User auf dem System sind, dann kann das schon eine Weile dauern. Es handelt sich dabei um eine Wahrscheinlichkeit. Es kann also durchaus sein, dass auch nach dem 500. Login noch nicht aufgeräumt wurde.
Wenn ihr also session.gc_divisor auf 1 oder session.gc_probability auf 100 setzt dann müsste die Tabelle m.E. nach einem Apache Neustart in jedem Fall bereinigt werden. Ich meine, dass Roundcube diese Werte unverändert lässt.
In der Theorie müssten somit alte Einträge aus der Session-Tabelle entfernt werden. Das tut es bei mir auch in der Praxis.
Mehr habe ich zu diesem Thema nicht gefunden und ich hoffe, dass ich richtig liege. Vorher habe ich mich damit auch noch nie befasst.