Roger: session-variable fehlt nach header-aufruf

moin!

ich weiss nicht woran es liegt, deshalb brauch ich mal wieder eure hilfe. folgendes script:

session_start();

[...]

if ($_POST["check"] == "ja")
{
 $_SESSION["name"] = $_POST["name"];
}
if ($_SESSION["test"] != 1)
{
 header("Location: ".$_SERVER['PHP_SELF']."?cmd=go");
 exit;
}

[...]

wenn $_POST["check"] == ja ist, wird ein wert in der sessionvariable ($_SESSION["name"]) gespeichert. allerdings bleibt dieser nur erhalten, solange $_SESSION["test"] == 1 ist. sollte $_SESSION["test"] != 1 sein, fehlt plötzlich der inhalt von $_SESSION["name"]; oder anders ausgedrückt, solange nicht die header-funktion aufgerufen wird, existiert der inhalt von $_SESSION["name"].

das ist doch ziemlich merkwürdig, oder?

gruß.
roger.

--
Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
  1. hi,

    oder anders ausgedrückt, solange nicht die header-funktion aufgerufen wird, existiert der inhalt von $_SESSION["name"].

    das ist doch ziemlich merkwürdig, oder?

    nein, ist es nicht.

    wenn du sessions verwendest sollte dir klar sein, dass die session-id von einer seite zur nächsten übergeben werden muss, damit die session auf der folgeseite wiedererkannt werden kann.

    dies kann entweder per cookie geschehen, oder per weitergabe der SID im URL.

    vermutlich ist die weitergabe per cookie in deinen PHP-einstellungen deaktiviert, oder dein client verweigert die annahme des cookies, so dass die übergabe jetzt per URL stattfinden _muss_.

    bei "normalen" links ist PHP in der lage, die SID automatisch dranzuhängen; deinen URL im header()-befehl beeinflusst es aber nicht, also musst du hier das anhängen manuell machen.

    gruß,
    wahsaga

    --
    I'll try being nicer if you'll try being smarter.
    1. moin!

      yo, kann wohl ein fehler sein. die übergabe findet aber statt, weil eben andere inhalte der variablen auch noch da sind (übergabe per cookie). ich lasse extra mit print_r($_SESSION); den inhalt der session ausgeben. nur so hab ich erst mal festgestellt, dass genau dieser wert fehlt :(

      gruß.
      roger.

      --
      Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
      1. Hello,

        yo, kann wohl ein fehler sein. die übergabe findet aber statt, weil eben andere inhalte der variablen auch noch da sind (übergabe per cookie). ich lasse extra mit print_r($_SESSION); den inhalt der session ausgeben. nur so hab ich erst mal festgestellt, dass genau dieser wert fehlt :(

        Was ist das für ein Gewusel. Wenn Du nicht weißt, ob dei Cookies ankommen, dann ist es ein Fehler, und zwar Deiner.

        Wenn Du innerhalb eines CMS header("Location: xyz") benutzt, nachdem die Session bereits erteilt wurde, dann ist das Konzept falsch. Man übergibt nicht unnötig die Kontrolle an den Client, bzw. erhöht die mögliche Variationsbreite des Client, wenn sie bereits eng definiert war.

        Schau Dir mal "Affenformular" an (hier im Archiv).

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
  2. moin!

    hm, immer noch merkwürdig. ich hatte o.g. script etwas vereinfacht, aber vielleicht lag da gerade der wurm drin. die session-variable war ein assoziative array und enthielt eine adresse. also nicht $_SESSION["name"] sondern $_SESSION["kunde"]["name"]. ich hab jetzt einiges probiert. der headeraufruf hat einen entscheidenden schritt übersprungen. in diesem schritt wird eine datei per uploadformular auf den server geladen. selbst vor dem uploadformular wird die adresse noch angezeigt. allerdings nicht mehr nach dem uploaden. ob der schritt nun übersprungen wurde oder nicht. auf der nächsten seite wird die variable nicht mal angefasst. trotzdem fehlt der eintrag der adresse.
    ich hab es jetzt gelöst, indem ich einfach eine weiter variable angelegt habe $_SESSION["kunde2"]["name"]. somit wird der bestehenden erst mal nix zugeführt und gelöscht. und ich hab endlich meine daten in der session. ich frag mich nur warum...?

    gruß.
    roger.

    --
    Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de
    1. hi,

      die session-variable war ein assoziative array und enthielt eine adresse. also nicht $_SESSION["name"] sondern $_SESSION["kunde"]["name"]. ich hab jetzt einiges probiert. der headeraufruf hat einen entscheidenden schritt übersprungen. in diesem schritt wird eine datei per uploadformular auf den server geladen. selbst vor dem uploadformular wird die adresse noch angezeigt. allerdings nicht mehr nach dem uploaden. ob der schritt nun übersprungen wurde oder nicht. auf der nächsten seite wird die variable nicht mal angefasst. trotzdem fehlt der eintrag der adresse.
      ich hab es jetzt gelöst, indem ich einfach eine weiter variable angelegt habe $_SESSION["kunde2"]["name"]. somit wird der bestehenden erst mal nix zugeführt und gelöscht. und ich hab endlich meine daten in der session. ich frag mich nur warum...?

      hast du im uploadformular evtl. ein feld namens "kunde"?
      und evtl. auch noch register_globals=on?

      habe in letzter zeit öfters von problemen in der richtung gelesen, dass der vom formular kommende wert dann session-variablöen überschreibt (obwohl das natürlich eigentlich nicht möglich sein sollte).

      gruß,
      wahsaga

      --
      I'll try being nicer if you'll try being smarter.
      1. moin!

        nee, nicht wirklich. da gibts eben nur die upload-variable. und noch ne kommando-variable.
        direkt überschrieben wird ja die session-variable nicht. vielmehr gelöscht, sie sieht so aus wie ein schritt weiter zurück.
        globals hab ich auf off. ich teste das ganze momentan lokal auf meinem win-pc. und um mich gleich zu zwingen, das richtig zu machen, hab ich die jetzt immer auf "off" :)

        ich hatte aber schonmal ein ähnliches problem. und zwar wurde aus einer einfachen session-variablen ein assoziative array gemacht. ohne dass ich da hand anlegte.
        1.: wert zum ersten mal zuweisen -> $_SESSION['preis'] = 10.00;
        2.: wilde rechenkünste veranstalten ;) $endpreis = 100 + $_SESSION['preis'];
        3.: neuen wert in vorhandene session-variablen schreiben -> $_SESSION['preis'] = $endpreis;

        und immer, rein zufällig, ergab es sich, dass die variable plötzlich zu $_SESSION['preis']['preis'] mutierte...

        gruß.
        roger.

        --
        Dein eigenes Newslettersystem auf deiner Homepage: http://newsletter.maennchen1.de