Mailinglisten-Archive |
Hallo,
Ausgangssituation ist php 4.3.9 mit register_globals=off und das
Problem, dass eine Objektinstanz als Session-Variable zwischen den
Seiten ihre Daten 'vergisst', hier jeweils die Auszüge:
class.php:
---------- 8< ---------
class test {
$var = 0;
}
---------- 8< ---------
form.php entält ein POST-Formular und ruft sich meistens selber auf:
---------- 8< ---------
include ('class.php');
session_start();
if (!isset($_SESSION['obj'])) {
session_register ('obj');
$obj = new test();
$obj->var = 20;
}
else
$obj = $_SESSION['obj'];
---------- 8< ---------
Beim ersten Aufruf wird $obj sauber erzeugt, bei den folgenden Aufrufen
ist $obj->var=0, obwohl der erste if-Zweig nicht durchlaufen wird!?!?
Gestern habe ich es kurzfristig gefixed bekommen, in dem ich am Ende
des Scripte der $_SESSION['obj'] = $obj wieder zugewiesen haben, aber
das ist doch 'unlogisch'. Die Vermutung, dass mit verschiedenen
Instanzen (und nicht Objektreferenzen) gearbeitet wird, hat mich dann
zum Einsatz von $obj = &$_SESSION['obj'] geführt, aber das half nicht.
p.s: ein Beispiel, warum mit register_globals=off zu viel Sicherheit
hochgefahren wird: wenn Scripte sich selbst aufrufen (kommt bei
Formularen ja gerne vor), ist durch session_register die Variable im
globalen Namespace, wenn sie aber schon existiert, dann ist sie es
nicht mehr (btw: auch extract hat bei mir dann nicht geholfen)...
Hat dazu jemand Ideen, Hinweise oder Tipps? Danke...
--
Oliver Michalak
GoLive Extensions Actions: http://www.golive.werk01.de
php::bar PHP Wiki - Listenarchive