Mehrseitiges Formular mit Session übergeben

Crunchip

Mitglied
Hallo ich habe vor ein 3-4 seitiges Formular zu erstellen wo die Daten anschliessend in eine Datenbank eingetragen werden sollen als registrierung.
Nun weiß ich jedoch leider nicht ob ich die Session schon beim betreten der seite vergeben soll oder erst wenn man auf die registrierung klickt. Und was passiert wenn man die Registrierung abbricht kann man die session dann wieder schliessen?
Freue mich auf eure Antworten.

LG
 
Wenn ich dich richtig verstehe, dann musst du eigentlich bereits auf der ersten Seite die Session starten. Immer beim Wechsel von der einen Seite zur nächsten trägst du die gemachten Angaben in die Sessionvariablen ein.

Andernfalls müsstest du für die Angaben der vorherigen Seiten z.B. in versteckten Felder auf die Folgeseite übernehmen.

Um die Session zu zerstören kannst du auf allen Seiten die nichts mit dem Formular zu tun haben session_destroy verwenden.
 
Wie tombe schon schrieb "musst" du das auf die Session auf der ersten Seite schon öffnen. Der große Nachteil ist, wenn du es über hidden-Fields machst, dass in einem Formular, dass auf Seite 1 z.B. Vorname und Name abfrägt seinen echten Namen und Vornamen einträgt, das Formular absendet, es als korrekt validiert wird und anschließend auf Seite 2 gelangt.

Dort kann er dann z.B. über die Web Developer Toolbar (Firefox Addon) die Werte in den hidden-Fields manipulieren und so z.B. Schadcode in die DB schleusen - außer natürlich du führst für jede Seite eine Validierung ALLER vorangegangener Werte aus, was aber bei wachsenden Formularen gut nervig werden kann. ;)

Auch solltest du auf jeder Seite prüfen, ob der Nutzer nicht quer in das Formular eingestiegen ist (z.B. direkt auf Seite 3 des Formulars), sonst kann er unter Umständen auch Schadcode in deine Session schleusen.
 
Kann ich die session theoretisch auch erst starten wenn man bei der registrierung ist?
Oder kommt es da dann zu problemen?
 
Angenommen die Registrierung besteht aus 3 Seiten.

Dann startest du (natürlich) auf Seite 1 die Session und übergibst beim Abschicken z.B. $_SESSION['seite1'] = true.

Auf Seite 2 wird dann ebenfalls session_start() ausgeführt und geprüft ob die Variable "seite1" mit dem entsprechenden Wert gesetzt ist:

JA: es geht auf Seite 2 weiter
NEIN: es wird auf Seite 1 umgeleitet

Beim Abschicken von Seite 2 wird die Variable $_SESSION['seite2'] = true erzeugt und auf Seite 3 wird dann geprüft ob diese existiert.

JA: es geht auf Seite 3 weiter
NEIN: es wird auf Seite 2 umgeleitet

Wenn jemand direkt auf Seite 3 einsteigen will, wird er von dort auf Seite 2 geleitet weil die Prüfung fehl schlägt und auf Seite 2 wird er auf Seite 1 umgeleitet weil es die entsprechende Sessionvariable ebenfalls nicht gibt.
 
Kann es sein, dass du das Prinzip/den Sinn von Sessions nicht ganz verstanden hast?

Sessions sind dazu da, aus einer zustandslosen (stateless) eine zustandsbehaftete (oder wie übersetzt man stateful?) Web-Applikation zu machen. Das heißt, du kannst Informationen zwischen Seiten transportieren.

Sessions werden z.B. u.a. dafür verwendet Benutzerdaten von eingeloggten Benutzern innerhalb enes best. Zeitraums (bzw. so lange der Benutzer aktiv ist) auf allen Seiten einer Web-Applikation verfügbar zu machen. D.h., der Benutzer loggt sich auf der Login-Seite ein, seine Daten werden aus der DB gelesen und in der Session gespeichert, er surft weiter und überlegt sich "ich könnte ja mein Passwort ändern" -> wird aus der Session seine Benutzerkennung geholt und alle Daten die zu ihm gehören aus der DB geholt, sodass er sein Passwort ändern kann.

Mal ganz vereinfacht beschrieben. O:-)

Wenn du in deinem Formular die Session erst bei der Registrieren-Seite anlegst (von der Überlegung her schon total unsinnig, denn: Für was willst du die Formulardaten desBenutzers in der Session speichern, um sie von dort aus dann in der Datenbank zu speichern), dann kannst du die Daten ja nur bedingt (eben über hidden-Fields im Formular) zwischen den Seiten transportieren.
 
Wenn du in deinem Formular die Session erst bei der Registrieren-Seite anlegst (von der Überlegung her schon total unsinnig, denn: Für was willst du die Formulardaten desBenutzers in der Session speichern, um sie von dort aus dann in der Datenbank zu speichern), dann kannst du die Daten ja nur bedingt (eben über hidden-Fields im Formular) zwischen den Seiten transportieren.

Warum bitte ist es unsinnig die Session erst auf der Seite zu starten wo die Registrierung/das Login gemacht wird.

Angenommen ich komme als Gast auf tutorials.de und schaue mich ein bisschen um.
Wozu sollen dann meine Benutzerdaten (die es von Gästen eh nicht gibt) bereits auf der Startseite ermittelt werden?

Ich zumindest verstehe die Frage so ob es ausreicht beim Betreten der Registrierungsseite(n) die Session zu starten.

Nicht in dem Moment wo ich auf den Button "Registrieren" klicke und mit allem fertig bin.

Für den Fall hast du natürlich absolut Recht, dann wäre es zu spät.
 
Also ich habe die aussage von DirkHo auch nicht so ganz verstanden.
Natürlich wäre es sinnlos wenn ich die Session erst starte wenn man auf "Registrieren" klickt das soll ja auch nicht sein. Die session soll gestartet werden sobald man das Formluar das erste mal zu gesicht bekommt. Also reicht das völlig aus wenn ich dann auf der ersten Formularseite die Session starte und nach dem absenden der registrierung die Session wieder zerstöre oder?
 
Kommt darauf an.

Wenn es wirklich nur ums Registrieren bzw. darum geht die Angaben von Seite 1 zu Seite 2 und zu Seite 3 zu transportieren, dann kannst du die Session beim Anklicken des Button zerstören.

Natürlich vorausgesetzt das der zur Registrierung gehörende Code (speichern in der DB) auch fehlerfrei ausgeführt wurde.

Wenn du die Angaben noch für irgendwas anders wärend des Besuchs der Seite brauchst, dann musst du sie logischerweise bestehen lassen.
 
ok super danke. also eigentlich brauche ich sie dann nicht weiter. erst wenn sich der user einloggt dann soll eine neue session erstellt werden in der dann die ganzen daten stehen die er für seinen besuch benötigt.
 
Zurück