phpbar.de logo

Mailinglisten-Archive

[php] Objekt in Session ohne Inhalt

[php] Objekt in Session ohne Inhalt

Daniel Cramer cramerpost at cvosite.de
Fre Okt 31 09:46:10 CET 2003


Guten Morgen, 

> 
> nur nochmal zur Verdeutlichung, du hattest doch geschrieben 
> das es nur 
> um eine bestimmte Klasse ging , oder? Also das es mit anderen Klassen 
> klappen würde!!!
> 
> Ja oder Nein?
> wenn nein, besteht das Problem nur mit Klassen oder kannst keine 
> Variablen in der Session speichern?

Andere Variablen in der Session sind kein Problem.


 

> > Include('object.class');
> > $foo = new obj();
> > Session_start();
> > $_SESSION['foo'] = $foo;
> > ...
> 
> das ist schlecht so!!!
> wenn z.b. 'register_globals=on' ist, dann ist $foo und 
> $_SESSION['foo'] 
> eh die selbe Variable!

Is 'on'. Da sieht man wie weit mich die Verzweiflung bereits gebracht
hat! :D
Aber wenn "$foo = new obj();" == "$_SESSION['foo'] = $foo;" müsste doch
auch

Include('object.class');
$_SESSION['foo'] = new obj();
Session_start();

Funktionieren. Warum? Ich schreibe doch in eine Session, die erst in der
nächsten Zeile gestartet wird, oder irre ich wieder?


Zum Verständnis jetzt nochmal das ganz etwas vollständiger. Ich wollte
nur nicht gleich die Liste mit QC überfluten.

Die Klasse aufs wesentliche reduziert:
--------------------
class userverwaltung
{
var $arrayUserDaten = Array();

// Die Methode liefert die Userdaten zurück
function getArrayUserDaten($key)
{
    if (empty($key)) {
        return $this->arrayUserDaten;
        }
    else {
        return $this->arrayUserDaten[$key];
        }
}

// Die Methode setzt die Userdaten
function setArrayUserDaten($key, $wert)
{
    print '<br><b>Daten werden gesetzt</b>';
    if ($wert == "") {
        $this->arrayUserDaten = $key;
        }
    else {
        $this->arrayUserDaten[$key] = $wert;
        }
}

//Funktionen dienen zum speichern der Klasse in der Session
/*function __sleep()
{
    return array('arrayUserDaten','arrayConfigDaten');
}

function __wakeup()
{

}*/

// Die Methode versucht den User anzumelden und liefert folgende Werte
zurück
// Erfolgsfall = 0
// Fehlerfall  = 1
function checkLoginData($email,$password)
{
    $password = md5($password);    
    $query = "SELECT pw from db WHERE email='".$email."' LIMIT 1";
    include('db.cod');
    $result = mysql_query($query);
    if (!$result) {
        print "<br>Daten konnten nicht aus db abgefragt werden.";
        die;
       }
    $daten_row = mysql_fetch_array($result);
    if ($password == $daten_row['pw']) {
        $login = 0;
        }
    else {
        $login = 1;
        }
    return $login;
}

// Die Methode loggt einen User in die aktuelle Session ein.
// Die Daten werden anhand der E-Mailadresse ermittelt.
function loginUser($loginEmail)
{
    $query = "SELECT * FROM db WHERE email = '".$loginEmail."' LIMIT 1";
    include('db.cod');
    $result = mysql_query($query);
    if (!$result) {
        print "<br>Daten konnten nicht aus db abgefragt werden.";
        die;
        }
    $daten_row = mysql_fetch_array($result);
    $this->setArrayUserDaten($daten_row);
    //Testausgabe, ob die Daten überhaupt da sind
    print '<b>User '.$this->arrayUserDaten['name'].',
'.$this->arrayUserDaten['vorname'].' ist angemeldet</b>';
}
}
---------------------
Der Aufruf der Klasse, die Initialisierung...

Include('userverwaltung.class');
$foo = new obj();
Session_start();
$_SESSION['foo'] = $foo;

---------------------
... Und die Arbeit damit.

if ($_REQUEST['action'] == 'login') {
	$userIsKnown =
$_SESSION['class_anmeldung']->checkLoginData($_REQUEST['login_email'],$_
REQUEST['login_password']);
	if ($userIsKnown == 0) {
	
$_SESSION['class_anmeldung']->loginUser($_REQUEST['login_email']);
		}
	}
---------------------
Letzten Endes soll dabei rauskommen, dass, wenn eine E-Mailadresse und
ein Passwort gesendet werden, die Daten aus der Datenbank geprüft werden
und ein Rückgabewert zurückgeliefert wird, an dem sich entscheidet, ob
alle Daten geholt werden.
Das funktioniert auch reibungslos und die Meldung, dass der
entsprechende User angemeldet wurde erscheint auf dem Bildschirm. Klickt
man jetzt jetzt auch einen anderen link, der die gleiche Seite noch mal
aufruft und die Session-ID mit übergibt, jedoch mit anderen Parametern,
sind anschließend alle Daten futsch. Die brauch ich aber und der Unsinn
mit der userverwaltung.class soll mir ja nur die Daten besorgen, damit
ich sie in der Hinterhand habe. Das sind auch die einzigen Zeilen, in
denen ich auf die Klasse zugreife.

Ich hoffe das hilft weiter.

Gruß, Daniel


php::bar PHP Wiki   -   Listenarchive