Problem mit Variablen in einer Session

dtdesign

Mitglied
Hallo,

ich habe versucht, Fehlermeldungen in eine Variable innerhalb der Session zu schreiben, damit das lästige (und manipulierbare) übergeben von Fehlermeldungen über die URL ein Ende hat.

Ich setzte dabei die Variable $_SESSION['error_msg'] auf einen bestimmten Wert und leite dann per header("Location: xyz.php") um. Auf der Seite xyz.php wird dann überprüft ob die Variable $_SESSION['error_msg'] nicht leer ist, um diese dann in eine normale Variable zu schreiben (sprich $msg = $_SESSION['error_msg']). Sinn und Zweck des ganzen ist es, nach dem speichern in die Variable, $_SESSION['error_msg'] wieder zu leeren, damit die Nachricht nur einmalig angezeigt wird (was ja auch Sinn des ganzen ist).

Mein Problem hierbei ist nur, dass aus irgendeinem Grund, PHP zwar $msg mit der Sessionvariable füllt, allerdings beim löschen der Sessionvariable ist auch $msg wieder leer. Kann ich PHP irgendwie dazu bewegen, den Inhalt erst reinzuschreiben und dann zu löschen?

Ein kleines (leicht unformatiertes ^^) Beispiel-Skript soll das ganze verdeutlichen:

PHP:
<?php
session_start();

if(isset($_GET['msg']))
{
    $_SESSION['msg'] = $_GET['msg'];
    $msg = $_SESSION['msg'];
    // ***
    // *** Die Zeile hier drunter auskommentieren um den gewuenschten Effekt zu erzielen
    // ***
    $_SESSION['msg'] = '';
    header("Location: test.php");
}
else
{
echo $_SESSION['msg'];
}
?>

Der Aufruf über test.php?msg=abc leitet mich auch test.php weiter, zeigt jedoch keine Nachricht an. Sobald ich die entsprechende Zeile auskommentiere, zeigt mir nach dem Weiterleiten die test.php die Nachricht an.

Ich bin für einen kleinen Denkanstoß dankbar, da ich solangsam mit meinem Latein (hier: PHP) am Ende bin.

PS: Falls es nützlich ist, ich verwende PHP 5.0.4/Win mit register_globals = off (eigentlich selbstverständlich...)

Mit freundlichen Grüßen
dtdesign
 
Hallo,

na ist doch klar, dass die Sessionvariable leer ist, wenn du sie vor der [phpf]header[/phpf]-Umleitung mit einem leeren String besetzt.

Grüße,
Matthias
 
Wieso speicherst du die Meldung überhaupt in der Sitzung und gibst sie nicht direkt aus?
 
Matthias Reitinger hat gesagt.:
Hallo,

na ist doch klar, dass die Sessionvariable leer ist, wenn du sie vor der [phpf]header[/phpf]-Umleitung mit einem leeren String besetzt.

Grüße,
Matthias

Ach so, d.h. ich darf die Sessionvariable erst auf der Folgeseite (auf die umgeleitet wird) leeren. Ok, danke, das war der benötigte Denkanstoß :)

Gumbo hat gesagt.:
Wieso speicherst du die Meldung überhaupt in der Sitzung und gibst sie nicht direkt aus?

Weil die erst nach der Weiterleitung mittels header() ausgegeben wird

Gruß
dtdesign
 
Zurück