Ich muss eine php4-Anwendung migrieren, die session_set_save_handler()
zu php5 verwendet.Seltsames Verhalten Migration von Sitzungen mit Rückrufen von PHP4 nach PHP5
In php4 war alles in Ordnung, aber in php5 können die Callback-Funktionen nicht mehr auf die globalen Variablen zugreifen, die auf der Seite gesetzt wurden, bevor session_set_save_handler()
aufgerufen wurde.
Im Beispiel unter dem globalen g1 var $ nicht in den session_writer()
zugegriffen werden (die als Callback-Funktion übergeben wird)
Gibt es eine Erklärung für dieses Verhalten oder können Sie einen Hinweis geben auf Sitzungen mit Rückrufen Migration von PHP4 bis 5?
Dies ist der Pseudocode:
function session_writer($id,$vars) {
global $g1;
echo "g1 not defined here: ".is_object($g1);
}
global $g1;
$g1 = SomeObject(); //which is the DB connection for the session writer
session_set_save_handler($o,$c,$r,"session_writer",$d,$g);
session_start();
Danke, ich beginne zu erfassen, was hier passiert. SomeObject() ist meine Datenbank. Also könnte ich die Erstellung des DB-Objekts auf die session_writer selbst umgestalten und kopieren, das wäre am einfachsten? – user89021
Nein, sie können überhaupt keine Objekte verwenden, außer Sie erzwingen das Schreiben der Sitzung * bevor * die Objekte zerstört werden. Wie ich schon sagte, sollten Sie session_write_close() von einem Objektdestruktor aufrufen ODER als shutdown-Funktion registrieren. – molf