Ilja: automatische Weiterleitung nach Scriptauswertung & Sessions

hi,

ich habe mal wieder 2 fragen.

erstens will ich, dass ein formular auf einer php seite ausgewertet wird und wenn alle daten korrekt sind, soll der anwender automatisch auf eine andere seite weitergeleitet werden. gibt es einen solchen befehl unter php oder auch html und wenn ja, wie sieht er aus.

meine zweite frage betrifft sessions unter php. kann ein user eine variable in eine session hineinschreiben. so weit ich weiss, werden die variablen auf dem server gespeichert und ein user hat nur die möglichkeit diese daten abzurufen, sofern er die gültige session-id kennt. ich bin mir aber nicht ganz sicher.
der hinergrund ist der, falls eine authorisierung bereits schon stattgefunden hat und eine variable in der session gespeichert ist, ob er diese manipulieren kann.

Ilja

  1. dem user ist nicht die option gegeben seine eigene session variablemanuell zu editieren, lediglich du allein bestimmst den inhalt dieser, bzw. welche inhalte aufgenommen werden sollen.
    <?
    // datenfelderüberprüfung
    // $CheckOKorNot boolean (yes/no)

    if($CheckOKorNot=="yes") {
    header(Location: "weiterleitung.php");
    }
    ?>

    1. ich bekomme folgende fehlermeldung bei deinen zeilen:

      Parse error: parse error, unexpected ':'

      Ilja

      <?
      // datenfelderüberprüfung
      // $CheckOKorNot boolean (yes/no)

      if($CheckOKorNot=="yes") {
      header(Location: "weiterleitung.php");
      }
      ?>

      1. oh sorry,
        der doppelpunkt nach location ist mist...

        1. oh sorry,
          der doppelpunkt nach location ist mist...

          ohne doppelpunkt gibt es folgende fehlermeldung:

          Parse error: parse error, unexpected T_STRING

          Ilja

          1. Hallo,

            was Du brauchst, ist eine HTTP-Weiterleitung. Christopher wollte Dir genau das zeigen, jedoch sind ihm ein paar Flüchtigkeitsfehler unterlaufen.

            Eine HTTP-Weiterleitung verschickst Du als Feld im HTTP-Header. Daher darf noch keine Ausgabe vom Script produziert worden sein.

            Ein Location-Header wird so gesendet:

            Header ("Location: " . $uri);

            $uri muss laut Standard eine absolute URI sein. Einige Browser interpretieren zwar auch relative URIs, aber das ist schlichweg falsch.

            Desweiteren: Auf die Seite, auf die weitergeleitet wird, wird dann per GET vom Browser zugegriffen. (also nicht POST wie es üblich ist bei Formularen)

            Also:

            function Leite_Weiter ($wohin_relativ) {
              $dn = dirname ($_SERVER["PHP_SELF"]);
              if (substr ($dn, -1) != "/") $dn .= "/";
              Header ("Location: http://" . $_SERVER["HTTP_HOST"] . $dn . $wohin_relativ;
              exit;
            }

            Diese Funktion kannst Du dann so aufrufen:

            Leite_Weiter ("index.php?a=b");

            Danach wird die Programmausführung beendet.

            Du musst bloß sicherstellen, dass der User *nicht* direkt über die IP auf den Server zugreift. (sofern das mit virtual hosts überhaupt möglich ist) [1]

            Grüße,

            Christian

            [1] Das Problem hatte ich schon mal, dass dann in $_SERVER["HTTP_HOST"] der Hostname und nicht die IP stand und dann hat der Session-Cookie natürlich nicht mehr gegriffen.