Frage zum Speichern von Objekten in Sessions

jenno

Erfahrenes Mitglied
Ich versuche mich gerade mit der objektorientierten Programmierung in php.

Bisher habe ich eine Klasse, die bestimmte Daten für eine Session sammelt. Es soll dann in einer Session ein Objekt gespeichert werden, das die entsprechenden Daten enthält. Das funktioniert soweit auch alles.

Meine Frage ist allerdings, wenn ich nur eine bestimmte Property der Klasse in der Session speicher und dann in einer anderen Seite die Session wieder auslese und mittels unserialize aus dem Sessioneintrag wieder ein Objekt mache, kann ich dann auf alle beliebigen Methoden der Klasse zu der das Objekt gehört zugreifen?

Hier mal etwas Code:

//Klasse Session
PHP:
<?
class Session {
	
	//properties
	
	//database
	var $sqlhost = "localhost";
	var $sqluser = "test";
	var $sqlpass = "xx";
	var $sqldb = "test";
	
	var $linkid;
	var $seshid;
	var $sessdata;
	var $err;
	var $err_no;
	var $userid;
	
	var $act;
	
	function Session($localSeshID, $localUserID=0) {
		
		$this->seshid = $localSeshID;
		$this->userid = $localUserID;
		
		//connect to MySQL
		$this->linkid = mysql_connect($this->sqlhost, $this->sqluser, $this->sqlpass);
		
		//was not able to connect
		if(!$this->linkid) {
			$this->err = mysql_error();
			$this->err_no = 101;
			return;
		}
		
		//select database
		$result = mysql_select_db($this->sqldb, $this->linkid);
		//unable to select database
		if(!$result) {
			$this->err = mysql_error();
			$this->err_no = 102;
			return;
		}
		
		$query = "SELECT * FROM sessions 
				WHERE seshid = '$this->seshid'";
		$result = mysql_query($query);	
			
		if(!$result) {
			$this->err = mysql_error();
			$this->err_no = 103;
			return;
		}
		
		//verify valid data returned
		$numrows = mysql_num_rows($result);	
		
		//save new session in database
		if(!$numrows) { 
			
			$query = "INSERT INTO sessions
					VALUES ('$this->seshid', 
						'$this->userid',
						'$current')";
			$result = mysql_query($query);
			
			if(!$result) {
				$this->err = mysql_error();
				$this->err_no = 104;
				return;
			}
			
			//finished session create return to script
			$this->err_no = 0;
			return;
			
		}
		
		//existing session
		else {
		
			//get session data
			$this->sessdata = mysql_fetch_array($result);
			
			$this->err_no = 0;
			unset($this->err);
			$this->userid = $this->sessdata[userid];
			
		}
		
	}
	
	function setAct($localAct) {
		
		$this->sessdata[testact] = $localAct;
		
	}
	
}
?>

Diese Klasse wird überall eingebunden. Wenn ich jetzt in einer php Seite die unterste Methode setAct aufrufe, dann gibts nen Fehler "Called to undefined function"

//Anfang einer php-Seite
PHP:
<?session_start();

include_once($_SERVER['DOCUMENT_ROOT']."inc/settings.inc");

$mysesh->sessdata = unserialize($_SESSION['session']);

//Hier kommt der Fehler "Called to undefined function"
$mysesh->setAct("test");
?>

Irgendwas habe ich anscheinend noch nicht ganz verstanden. Aber was?

Edit:
Wenn ich mir das so ansehe, dann denke ich, das Problem ist, dass ich nicht das ganze Objekt in der Session speicher, sonderen "nur" $mysesh->sessdata. Aber ich möchte eben nur diese Daten in der Session zu stehen haben, die in sessdata stehen und nicht alle Properties der Klasse...
 
Zuletzt bearbeitet:
PHP:
<?
include_once($_SERVER['DOCUMENT_ROOT']."inc/settings.inc");
session_start();

$mysesh->sessdata = unserialize($_SESSION['session']);

//Hier kommt der Fehler "Called to undefined function"
$mysesh->setAct("test");
?>
du musst die Klasse includen bevor du die session startest!
 
stimmt, ich definiere $mysesh gar nicht, ich habe einfach den code von jenno genommen und die ersten beiden zeilen in die richtige reihenfolge gebracht.
 
Zurück