Okt 17
PHP session_set_save_handler
Als ich heute begonnen habe ein neues Projekt zu designen, bin ich bei dem Erstellen des UML-Diagramms für den Sessionhandler auf die Frage gestoßen, wie genau die Methoden aufgerufen werden, wenn man die Funktion session_set_save_handler(…) verwendet.
Konkretes Problem in diesem Fall war, dafür zu sorgen das nachdem Login und nachdem Logout definitiv eine neue session_id bereit gestellt wird und man keine verwaisten Session’s, auf der Platte oder in der Datenbank oder wo auch immer man die Daten speichert, hat.
Verwendet wird dafür session_regenerate_id(true); das ist schon klar. Aber welche Methoden werden dann gerufen.
session_set_save_handler(array($__session,"openSession"),
array($__session,"closeSession"),
array($__session,"readSession"),
array($__session,"writeSession"),
array($__session,"destroySession"),
array($__session,"gcSession"));
Dies sind die registrierten Methoden. Bei dem obigen Beispiel, wäre die Aufrufreihenfolge: openSession() -> readSession() -> destroySession() -> writeSession() -> closeSession()
Ruft man die Methode ohne true auf, wird destroySession() nicht aufgerufen. Ruft man die Methode session_destroy() auf, wird die Methode writeSession() nicht aufgerufen.
Ich persönlich habe es nicht genau gewusst, falls jemand dasselbe Problem hatte und es nicht getestet hat, hoffe ich das dieser Artikel weiterhelfen konnte, da ich nichts passendes gefunden habe.

24. Juni 2009 um 12:04
Ist zwar schon etwas älter, aber ich habe es so gelöst, dass ich die alte Session-ID ein einer Variable sichere, dann session_regenerate_id(false) aufrufe und zum Schluss (in meinem Fall per Datenbank-Update) die alte Session-ID durch die Neue ersetze. Dadurch ist auch gleich die alte Session nicht mehr vorhanden.