Sessiondaten werden nicht gespeichert

worki2k1

Erfahrenes Mitglied
Hallo Leute,

ich habe hier gerade wieder ein ganz eigenartiges Problem. Irgendwie kann ich eine bestehende Session nicht um weitere Variablen erweitern.

Situation:
In einem Formular gebe ich Benutzername und Kennwort ein. Diese werden an die Datei login.php geschickt, welche in der Datenbank prüft ob alles richtig ist. Es wird ein Objekt myuser erstellt und dort bereits ein paar Daten zugewiesen. Das komplette Objekt wird in der Session gespeichert. (Quellcode weiter unten). Danach wird auf chooseuser.php weitergeleitet, die anhand der Daten in der Session weitere Einstellungen macht, sich Daten holt und diese ebenfalls in der Session speichert. In der chooseuser.php wird dann wieder per header ("Location: url"); auf die nächste Seite gelinkt. In der Zielseite existieren aber die in der chooseuser.php gespeicherten Daten nicht mehr. Die aus login.php sind aber noch da.

login.php
PHP:
session_start ();

if ($username == richtig && $passwort == richtig)
{
  $user = new myuser ($username, $passwort);
  $_SESSION["sess_user"] = $user;

  header ("Location: chooseuser.php?".session_name()."=".session_id());
}
else
{
  echo "blabla Fehler";
}
chooseuser.php
PHP:
session_start ();

// hole weitere Daten
// und erweitere die Session
$_SESSION["sess_user"]->irgendwas = "blablabla";

header ("Location: test.php?".session_name()."=".session_id());
test.php
PHP:
session_start ();

var_dump ($_SESSION);

// An dieser Stelle ist der Wert $_SESSION["sess_user"]->irgendwas
// wieder auf null zurück gesetzt.
// Die Werte, die in der login.php geschrieben wurden sind aber noch da.



Hab ich irgendwas übersehen? Ich sitz total auf dem Schlauch.

Nachtrag 1: Natürlich ist die Klassendefinition für das Objekt myuser vor dem session_start(); geladen worden.

Nachtrag 2: Hab inzwischen herausgefunden, dass es am register_globals liegt. Wenn register_globals = on ist, läuft es einwandfrei. Verstehe ich an der Sache nur nicht, da ich auf Variablen immer über $_REQUEST, $_GET, $_POST oder $_SESSION zugreife.
 
Zuletzt bearbeitet:
Um ein Objekt über eine Session speichern zu können musst du serialize() bzw unserialize() benutzen:
PHP:
<?php
$_SESSION['sess_user'] = serialize($user);
?>
Um dieses Objekt wiederrum auf jeder Seite nutzen zu können musst du es entserialisieren:
PHP:
<?php
$user = unserialize($_SESSION['sess_user']);

/* hier kannst du mit $user arbeiten, achte darauf das Objekt am Skriptende wieder zu serialisieren und zu speichern! */
?>
 
Du könntest auch ma n session_name(); angeben. Aber das was same gesagt hat ist schon richtig, man kann Objekte nicht einfach so in sessions speichern...
 
Hat doch aber bisher super geklappt ... Ich speichere Objekte schon ewig auf die Art in der Session. Aber ich werde es trotzdem mal probieren. Vielleicht ist es das ja auch schon.

Danke euch beiden
 
Original geschrieben von Karl Förster
Hat doch aber bisher super geklappt ... Ich speichere Objekte schon ewig auf die Art in der Session. Aber ich werde es trotzdem mal probieren. Vielleicht ist es das ja auch schon.

Danke euch beiden
Das ist eigentlich nicht möglich, du kannst dir ja mal echo $objekt; ausgeben lassen, du wirst als Anzeige dann "object" erhalten und genau der selbe String wird dann auch in der Session gespeichert. Beim deserialisieren des Objekts ist darauf zu achten, dass bei magic_quotes das Objekt vorher mit stripslashes() behandelt wird!
 
Original geschrieben von mowl
Das ist eigentlich nicht möglich, du kannst dir ja mal echo $objekt; ausgeben lassen, du wirst als Anzeige dann "object" erhalten und genau der selbe String wird dann auch in der Session gespeichert. Beim deserialisieren des Objekts ist darauf zu achten, dass bei magic_quotes das Objekt vorher mit stripslashes() behandelt wird!

Mhhh ziemlich eigenartig ... soweit ich weiß kann man Objekte ganz normal einbinden sofern sie vor dem Start der Session definiert wurden. Ich hab in der datei1.php das Objekt erstellt und es in der Session gespeichert. Danach kommt per header(); eine Weiterleitung datei2.php. Wenn ich dort ein var_dump($_SESSION); mache sehe ich, dass das Objekt ganz normal in der Session gespeichert ist. Es klappt also definitiv.
Wie ich schon geschrieben habe liegt es am register_globals ... an dieser Stelle werd ich also weitermachen.
 

Neue Beiträge

Zurück