Objekt in Session

tri2k

Grünschnabel
Hallo,
obwohl das Thema bereits mehrere Male behandelt wurde habe ich für mich keine Lösung gefunde. Im Moment versuche ich es gerade wieder mit serialisieren.

Folgendes:

Habe eine Login Seite, die mir ein Neues Objekt aus Username und Password erstellt. Dieses soll in einer Session gespeichert werden, damit ich immer wieder auf die beiden Sachen komme und diese nciht verstekct im Formular, bzw. per URL übergeben muß. In der Loginseite wird die Detailseite "included". Das geht alles wunderbar.
Nachdem auf dieser Änderungen gemacht werden, wird das Formular per PHPSELF wieder auf die Login.php geschickt. Dort sind die Daten der Session jetzt leider verloren gegangen.
Der Aufbau ist folgender maßen.

(Login.php)
PHP:
<?php
require_once("./Userclass.php");

$ThisUser = new User();  //habe gelesen, daß man das Objekt vor session_start instanzieren soll
session_start();

if(!isset($_SESSION['USERDATA'])) 
{
	$ThisUser = new User($username,$password); //eigentliche Instanz, $usernmae und $password kommen aus Loginformular
	$SessUser = serialize($ThisUser);
	$_SESSION['USERDATA'] = $SessUser; 
} 
else
{
        $ThisUser = unserialize($_SESSION['USERDATA']); 
} 

$check = $ThisUser->CheckUser();

if ($check == 1)
{
	include ("./details.php"); 
}

?>

(details.php)
PHP:
require_once("./Userclass.php");
$ThisUser = new User();
session_start();

$ThisUser = unserialize($_SESSION['USERDATA']);  //funktioniert

if(!isset($_SESSION['USERDATA'])) 
{
	echo "<br>Bitte erst einloggen<br>";
} 

<?php echo "<form action='$PHP_SELF' method='post'>\n";?>
//...      	
//ab hier kommt jetzt nen Formular, was mit Daten gefüllt ist und geändert werden kann
//per Submit-Button
//wenn das Formulat abgeschickt wird, sind die Information aus der Session in der login.php weg :-(

Ich hoffe, daß ich das Problem so gut und kurz es ging beschrieben habe. Vielen Dank
 
soweit wie ich es jetzt verstanden habe und mich in den Quelltext eingeschaut habe, denke ich das du, da in der login.php eine neue Instanz von User angelegt wird auch die session-Variablen gelöscht werden. Müsstest eben erst mal prüfen ob eine Instanz von User schon angelegt ist und wenn nicht, dann erst anlegen.


MFG schecker
 
Folgendes erstmal...
http://www.professionelle-softwareentwicklung-mit-php5.de/erste_auflage/oop.foundations.serialization.html hat gesagt.:
[...] Wird ein Objekt durch Ablegen in dem Array $_SESSION[] als Session-Variable registriert, so kümmert sich PHP automatisch um Serialisierung und Deserialisierung des Objektes zwischen den einzelnen Requests der Session. [...]
Und wo hast du gelesen, dass man Instanzen vor [phpf]session_start[/phpf] erstellen soll? Ist mir ehrlich gesagt nicht bekannt...
Und probier mal, obs klappt, wenn du die Sessionid mitschickst, also
PHP:
<?php echo "<form action='$PHP_SELF?".SID."' method='post'>\n";?>
 
Zuletzt bearbeitet:
Die Frage ist nun, ob Tri2k PHP5 benutzt und falls nicht ob seine PHP-Version sich genau so verhält.
 
Erstmal vielen Dank für die Antworten,
Also ich nutze PHP 4.4.4

@schecker:
das habe ich probiert, leider gings auch nicht,

@mAu:
Und wo hast du gelesen, dass man Instanzen vor session_start() erstellen soll? Ist mir ehrlich gesagt nicht bekannt...
Und probier mal, obs klappt, wenn du die Sessionid mitschickst, also

Das Instanizieren vor Sesion_start() habe ich in diversen Newsgroups gelesen, aber so richtig sicher war sich dort auch keiner, jedoch klammert man sich an jeden Hinweis der einen bei der Lösung des Problems helfen kann. ;-)

Genauso verhält es sich mit der Serialisierung, wollt auf Nummer sicher gehen, denn ohne geht es ja auch nicht.

Leider brachte das mitschicken der Sessionvaribale nichts, jedoch ist diese nach dem abschicken des Forms da und auch richtig (das habe ich getestet), d.h. mein Objekt müßte ansich noch in der Session stecken.

@Gumbo: notwenig bei diesem Objekt sicher nicht, aber bei anderen wird dann einfach dadurch, aber es muß ja erst mal funktionieren :-)

Werde mal weiterprobieren
 
Ich habe es rausbekommen. Trau mir gar nicht es zu sagen, aber der Pfad (aus der php.ini), in den die Sessiondaten geschrieben werden sollen existierte nicht... *heul*

Habe es nochmal mit zwei seperaten Seiten zum Test aufgebaut. Leider kann ich auf die Serialisierung nicht verzichten, ohne geht es nicht.

(seite1.php)

PHP:
require_once("./scripts/Userclass.php");
session_start();

$username = "test";
$password = "test";

if ($ThisUser == null)  $ThisUser = new User($username,$password);
	
if(!isset($_SESSION["USERDATA"])) 
{
	$SessUser = serialize($ThisUser);
	$_SESSION["USERDATA"] = $SessUser; 
}

?>
<html>
<head>....</head>
<body>
<p><a href ="./seite2.php">Session übergeben</a>
</body>
</html>

(seite.2php)
PHP:
<?php
require_once("./scripts/Userclass.php");
session_start();

if(!$_SESSION["USERDATA"]) 
{
	echo "<br>Bitte erst einloggen<br>";
} 
else
{
	$ThisUser = unserialize($_SESSION["USERDATA"]);
}

?>
<html>
<head>...</head>
<body>
<p>Das ist die Seite 2 wo die Session angenommen wird

<p><?php echo "Username: " . $ThisUser->_Username . "<br>\n";?>
<p><?php echo "Passwort: " . $ThisUser->_Password . "<br>\n";?>
 
Zuletzt bearbeitet:
Zurück