phpbar.de logo

Mailinglisten-Archive

[php] objekte in sessions

[php] objekte in sessions

Oliver Michalak omich at werk01.de
Fre Apr 15 11:07:03 CEST 2005


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