Session Variablen werden "zu früh" geleert

Eisbaer

Erfahrenes Mitglied
Hallo,

habe schon des öfteren ein Problem mit meinen Session Variablen, wie auch jetzt wieder.

Problembeschreibung in Kurzform:

Es gibt ein Formular, dort sind manche Felder Pflicht, bzw. es wird eine Überprüfung der Daten vorgenommen. Bei einem Fehler leite ich per header("Location"); zurück gebe eine Fehler Meldung aus und schreibe in die Felder wieder den Text rein den der User vorher eingegeben hat um nicht wieder alles neu zu machen. Da hier auch Textarea's existieren übergebe ich den Text kurzerhand per Session und mächte natürlich die Session Variable nach dem printen wieder leeren (1. damit bei einem erneuten Aufruf die Daten des Vorgängers drin stehen, 2 weils sauberer ist).

PHP:
if($_SESSION['SOLID_nombre']){
	$nombre = $_SESSION['SOLID_nombre'];
	unset($_SESSION['SOLID_nombre']);
}else{
	$nombre = "Nombre:*";
}

hier ist eines der vielen Versuche die ich gemacht habe.

Was passiert hier? Die Session wird geleert, Problematisch ist allerdings hier, die Session wird wohl geleert bevor der Inhalt in die Variable $nombre geschrieben wird. $nombre ist also leer. Nehme ich aber nun die Zeile mit dem unset raus (oder Kommentiere Sie aus) funktioniert es wie gewünscht, bis auf die Tatsache das die Session Variable immer noch gefüllt ist, was wiederum nicht gewünscht ist.

Wer kann mir hier helfen?

Danke
 
Mmmh, eigentlich sollte der Code machen, was du vorhast.

Was beinhaltet denn $nombre, wenn der Fehler auftritt?

Noch etwas:
Code:
if($_SESSION['SOLID_nombre'])

Dir ist bewusst, dass du damit nicht auf die Existenz der Session-Variablen prüfst, sondern darauf, ob ihr Wert als boolesches TRUE interpretierbar ist?
 
Problematisch ist allerdings hier, die Session wird wohl geleert bevor der Inhalt in die Variable $nombre geschrieben wird. $nombre ist also leer. Nehme ich aber nun die Zeile mit dem unset raus (oder Kommentiere Sie aus) funktioniert es wie gewünscht

Es hört sich an als sei der Inhalt der Variablen als Referenz übergeben worden, was ein eher untypisches Verhalten im Fall eines einfachen Strings ist. Oder ist in der Session-Variablen ein Objekt gespeichert?
 
Was beinhaltet denn $nombre, wenn der Fehler auftritt?

Noch etwas:
Code:
if($_SESSION['SOLID_nombre'])

Dir ist bewusst, dass du damit nicht auf die Existenz der Session-Variablen prüfst, sondern darauf, ob ihr Wert als boolesches TRUE interpretierbar ist?

Es ist ein Kontaktformular, das Textfeld "nombre" soll wenn es aufgerufen wird den Wert "Nombre:*" enthalten. Sendet der User das Formular ab wird eine Überprüfung verschiedener Felder vorgenommen (z.B. besteht die eingegebene Email aus dem @ und einem Punkt inkl. Text dazwischen, etc.) ergibt sich aus der Überprüfung eine Fehlerhafte Eingabe wird per header zurückgeleitet und die eingegebenen Werte werden über die Session Variablen zurückgeliefert (Damit der User nachher nicht nochmals alles neu tippen muss weil er z.B. nur vergessen hat seine Telefonnummer einzugeben) und danach geleert.

Ja ich könnte auch mit isset() prüfen, allerdings gibt es ja ein boolesches TRUE zurück wenn ein Wert in der Variable enthalten ist.


@Zodiac:

Nein es wird nur ein String übergeben auch ein var_dump sagt das es ein String ist, also kein Objekt.

Danke & Gruss

P.S.: Das Problem besteht auch weiterhin, also ich habe noch keine Lösung gefunden.

Arbeitsumgebung ist ein Apple G5 auf dem XAMPP läuft.
 
Du hast jetzt viel geschrieben, aber meine Frage nicht beantwortet :-)

Was beinhaltet denn $nombre, wenn der Fehler auftritt?

...was mich interessiert hätte, wäre dies:
Code:
if($_SESSION['SOLID_nombre']){
    $nombre = $_SESSION['SOLID_nombre'];
    unset($_SESSION['SOLID_nombre']);
}else{
    $nombre = "Nombre:*";
} 
echo $nombre;//was wird hier ausgegeben im Fehlerfall?
 
Hallo Sven,

sorry habe wohl den Nebensatz überlesen. Und muss jetzt ganz ehrlich sein, habe einen anderen Weg gewählt in diesem Fall, es funktioniert jetzt allerdings ohne Session Variablen, in diesem Projekt war es für mich möglich einen anderen Weg zu gehen. Von daher kann ich das jetzt nicht mehr zu 100% sagen was da drin gestanden hat, ich nehme an "Nombre:*". Aber wenn das Problem nochmals auftaucht in einem anderen Projekt wo es sich nicht so einfach zu umgehen lässt werde ich das Thema nochmals aufrollen, bis dahin sag ich erstmal danke an alle die hier mitgeholfen haben.

Danke & Gruss,

P.S.: Habe versucht das Problem in einem einfachen Test zu rekonstruieren doch dort hat es irgendwie funktioniert, also gehe ich mal davon aus das der Fehler woanderst liegt.
 
Zurück