Sven Rautenberg: Nach Weiterleitung trotzdem auf $_POST zugreifen?

Beitrag lesen

Moin!

Ich habe das bislang so gemacht, dass ich auf jeder Seite auf $_POST zugreife und die entsprechenden Daten wieder in hidden-inputs schreibe.

Das ist die ungünstigste Lösung, die du dir ausgesucht hast. Diese Daten sind mit jedem Mal, wo du das Formular erneut abschickst, potenziell unsicher, da völlig ohne Probleme änderbar.

Das macht aber doch keinen Unterschied. Wenn man mit dem Skript erstmal die Benutzereingaben auf mehreren Seiten sammelt und immer wieder in Hidden-Felder packt, ist das kein Problem. Erst das letztmalige Absenden der Daten sollte die Validierung derselben auslösen - danach darf man dann keinerlei Daten ungeprüft mehr vom Benutzer entgegennehmen.

Ich habe das jetzt so gelöst, dass ich je nach dem, welche Möglichkeit gewählt wurde einen Header mit einer Location sende. Das Problem ist jetzt natürlich, dass dadurch die ganzen vorigen Variablen verloren gehen. :-(

Du hast 2 Möglichkeiten.

Nur zwei? Würde ich nicht sagen.

Entweder du benutzt $_GET (funktioniert genau wie $_POST, nur eben für per GET übergebene Variablen und deren Werte.

Das hat den Nachteil der Längenbeschränkung. Aber die Weiterleitung funktioniert natürlich.

Die zweite, wesentlich sicherere Variante, mit der du auch o.g. Problem lösen kannst, heißt Sessions.

Die ist genauso sicher oder unsicher wie jede andere Variante.

Grob gesagt, werden die Daten, die mit einem Formular übertragen werden, auf dem Server gespeichert und sind nur anhand einer praktisch einmaligen - da mit MD5 verschlüsselten - SessionID zugreifbar.

Die Session-ID ist nicht MD5-verschlüsselt. Es ist einfach ein 128-Bit-Wert. Das macht ihn aber nicht zwingend unsicher - entscheidend ist, einen möglichst zufälligen Wert auszuwürfeln, damit man diesen Wert nicht raten kann.

Da liest du dich am besten mal in das Kapitel ein (http://www.php.net/manual/de/ref.session.php).

Die beste Methode wäre, einfach den Redirect zu vermeiden.

Irgendwo im jetzigen Skript wird festgestellt, was der Kunde wünscht. Anstatt jetzt mit header() weiterzuleiten auf eine andere Seite, kann man doch einfach den Seitencode an diese Stelle packen und wahlweise die eine oder andere Seitenvariante generieren.

if (mail_gewünscht)
{
  echo "Mailseite";
}
else
{
  echo "Postseite";
}

Um es mal grob zu formulieren. Und schon stehen alle Daten wieder schön zur Verfügung.

Ich bin grundsätzlich kein Freund von allzuvielen Redirects. Insbesondere das Absenden von Formularen darf keine Redirects benötigen. Denn der Server hat die Daten ja schon beim ersten Mal erhalten. Warum ist er zu doof, sie einfach zu bearbeiten und zu speichern? Beim Redirect muß ich alle Daten nochmal vom Browser senden lassen.

- Sven Rautenberg

--
"Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)