Sessions und PHP Klassen

Shooter2k

Erfahrenes Mitglied
Hallo Forum,
ich habe ein Problem mit meiner Session. Und zwar immer wenn ich ein neues Objekt erstelle für die Klasse, dann wird meine Session gelöscht bzw ich bekomme die ausgabe : Object id #2, obwohl in der session der username steht.

Um das mal zu verdeutlichen:

Sagen wir mal die Session user heißt "henry".
PHP:
require("klassen/class.php");
$_SESSION['user'] = "henry";
echo $_SESSION['user'];
Jetzt gibt er "Henry" ganz normal aus ohne probleme.

Schreibe ich aber weiter, so wie hier :

PHP:
require("klassen/class.php");
$_SESSION['user'] = "henry";

$user = new profil();
$user -> set_land("Deutschland");
$user -> show_land();
echo $_SESSION['user'];

Jetzt ist das echo $_SESSION['user']; unter new profil();
Und bekomme die ausgabe "Object id #2".

Woran liegt es ? Die Klassen haben doch rein gar nichts damit zu tun und ich mache auch in der klasse rein gar nichts mit der SESSION user. Sind das nicht zwei verschiedene paar Schuhe ? Hier meine Klasse:

PHP:
	class profil
	{
	var $country;
	var $wohnort;
	var $plz;
	
	function set_land($land){
	
	$this->$country = $land;
	}
	
	function show_land()
	{
	
	echo "Ich wohne im Land der begrenzten Möglichkeiten:".$this->$land;
	
	}
	

	
	
	
	}
Wenn ich $user = new profil(); auskommentiere, dann geht die session wieder, bzw hat den inhalt Henry...

Wäre ja wirklich schade, wenn ich innerhalb eines Dokuments auf einer Klasse zugreife und anschließend meine SESSION nicht mehr verwenden kann. Was mache ich falsch ?
Kann mir jemand helfen ?

danke
gruß
henry
 
Zuletzt bearbeitet:
Glaube alternativ könnte ich die Session User in der klasse registrieren. Aber verstehe trotzdem nicht was das soll. Eine Klasse ist eine Klasse und Session eine session oder habe ich da was falsch verstanden?
 
Bei mir geht das, aber ich weiß jetzt nicht ob man da was in der php.ini so einstellen kann, dass die var $user in $_SESSION['user'] schreibt. Weil Object id rauskommt muss das ja verknüpft sein. Probier doch mal vor lauter lustichkeit :-) mal $_SESSION['user1'] oder sowas, halt net user, damit das net identisch mit der Class var is

Gruß GalaxyWarrior
 
LOOOOOOOOOL LUSTIG Aha es geht .. *rofl* ..


PHP:
$_SESSION['user2'] = "henry";

$user = new profil();
$user -> set_land($land);
$user -> show_land();
echo $_SESSION['user2'];
Einfach user2 .. und es geht .. lol *freu*

Danke dir .. achja und danke auch für die hilfe zum counter in der seitenblaetterfunktion es geht alles ;)

mfg henry
 
Hallo, bin zwar neu hier, aber ich glaube zu wissen, worans gelegen hat.
Für mich klingt das nämlich ganz so, als wäre bei Henry in der php.ini "register_globals" auf "on" gestellt, was man wegen der Sicherheit und genau solchen Problemen auf "off" setzen sollte. Zur Überprüfung einfach eine Datei mit phpinfo() erstellen.

Schönen Gruß

Sebastian
 
Kurz und knapp:
Du schreibst nur eine Referenz in deine Session(ObjectID #xy); um eine Klasse in einer (Session-)Variable abzubilden, musst du es per serialize() machen.
PHP:
<?php

	// Beispielklasse mit den nötigsten Funktionen
	class instanz
	{

		function instanz($vorige_instanz = null)
		{
			$this = empty($vorige_instanz) ? $this : $vorige_instanz;
		}

		function save()
		{
			$_SESSION['klasseninstanz'] = serialize($this);
		}
	}

	session_start();
	if( isset($_SESSION['klasseninstanz']) ) {
		$instanz = new klasse(unserialize($_SESSION['klasseninstanz']));
	}  else {
		$instanz = klasse();
		// Verwendung der Klasseninstanz
		// und so weiter
		$instanz->save();
	}

?>

Hab's jetzt nicht getestet, sollte aber soweit laufen – nutze diesen Weg des öfteren.
 
Zurück