Problem mit PHP und Sessions: Formulareinträge werden beim Aktualisieren gelöscht
Hallo allerseits,
im Moment arbeite ich an einigen kleinen PHP-Projekten und kenne mich mittlerweile auch halbwegs gut damit aus. Nun habe ich aber ein Problem, zu dem mir keine Lösung einfällt.
Es geht einfach um HTML-Formulare die mit PHP ausgewertet werden undzwar in einer Seite, die mit Sessions arbeitet.
Mir ist aufgefallen, dass bei mir die Texteingaben beim aktualisieren der Seite einfach verschwinden, was aber zum Beispiel hier im Forum nicht der Fall ist (und auch bei kleinen, einfachen HTML Seiten, die ich testweise zusammengebastelt habe)
Nach etwas rumprobieren ist mir aufgefallen, dass dies genau dann der Fall ist, wenn ich die session_start() Funktion aufrufe. In dem Fall wird ja etwas in den Header geschrieben und der Browser nimmt das anscheinend so auf, dass die Formulardaten zurückgesetzt werden. Ebenso wird die Seitenposition wieder zurückgesetzt, d.h. man sieht immer den obersten Teil der Seite nach dem Aktualisieren.
Nun verwendet dieses Forum hier aber mit Sicherheit auch Sessions (Benutzeranmeldung), also muss es eine Möglichkeit geben, dieses Problem zu umgehen.
Ich habe mal versucht auto_session zu aktivieren, um die session_start() Funktion zu umgehen, aber das hat auch nicht wirklich etwas gebracht.
Kann mir hier jemand dazu weiterhelfen?
Ich bedanke mich schonmal im vorraus für jede Antwort.
C ya
Lachsen
PS: Im Übrigen verwende ich Firefox 2.0, allerdings zeigt der Internet Explorer 7.0 exakt das gleiche Verhalten...
Edit: Korrigiere - IE 7.0 löscht beim aktualisieren immer alle Formulareinträge. Allerdings nicht beim Vor- und Zurückgehen, worum es mir hier ja eigentlich geht.
Dieses Verhalten ist mir noch nie aufgefallen. Ich kann mir höchstens vorstellen, dass durch den zusätzlichen Header der Browser denkt es sei ne neue Seite und die alten Formulardaten wären nicht mehr gütlig.
Das Forum hier arbeitet auf keinen Fall immer mit Sessions. Wenn du "angemeldet bleiben" anhakst geht das ganz normal über Cookies und nicht über Sessions, wie es ist, wenn der Haken fehlt, weiß ich gerade nicht. Bist du sicher, dass IMMER etwas mitgesendet wird, wenn du session_start() aufrufst?
ich habe mal zur Demonstration zwei Beispielseiten hochgeladen:
Seite #1
Also ein ganz einfaches Formular.
In Firefox 2.0 bleibt hier der Text erhalten, wenn man ihn eingibt und aktualisiert. (zumindest bei mir)
Seite #2
Der einzige technische Unterschied ist der kurze PHP-Codeabschnitt am Anfang, wo die session_start() aufgerufen wird.
Bei Firefox 2.0 bleibt bei mir hier der Inputtext NICHT erhalten, wenn ich aktualisiere.
Nur damit ihr mir das ganze auch glaubt (ich hoffe jetz nur, dass das keine Browsereigenart ist)
Nun, du hast mir dennoch mit deinem Beitrag geholfen.
Denn jetzt weiß ich, wie ich auf die Verwendung von Sessions verzichten kann, um Benutzerdaten zu merken.
Ja, ich kam vorher nicht die Idee, Benutzer ID und Passworthash einfach mit Cookies abzuspeichern.
Im Prinzip kann ich das ganze jetzt so aufbauen, dass ich Sessions nichtmehr verwende. Dennoch wäre es ganz interessant zu wissen, ob es nicht auch mit Sessions funktioniert.
*sigh* just for you habe ich jetzt den Netzwerktraffic bei beiden Aufrufen und Reloads mitgeschnitten und mal analysiert. Hättest du dir mal die Header, die bei beiden Dateien mitgesendet werden, genauer angeguckt, wären dir sicherlich die folgenden aufgefallen, der nur bei formtest2.php gesendet wird:
All das sind mehr oder minder Hacks, die verhindern sollen, dass der Browser, der Proxy oder irgendeine andere Zwischenstelle die Seite zwischenspeichern. Um die Seite aber mit dem Inhalt des Feldes zu erhalten muss Firefox sie aber scheinbar cachen, und das wird mit den Headern verhindert.
Ich vermute einfach mal ganz stumpf, dass es sich hier nur um eine der verkorksten Sicherheitsmaßnahmen von PHP handelt, da eine Seite, die durch Übermittlung einer SID meistens nicht in andere Hände geraten soll. Wenn du die Header manuell mit header() überschreibst müsste es aber möglich sein, dieses Verhalten zu ändern. Falls nicht ist das wirklich ein Armutszeugnis für PHP und du solltest tatsächlich auf Cookies bzw. eine manuelle Implementierung von Sessions umsteigen.
Solltest du noch Interesse am Mitschnitt haben kann ich ihn dir natürlich auch gerne zukommen lassen, bin aber gerade zu faul den abzuspeichern und hochzuladen
PS: Mir braucht jetzt keiner Live Headers o.Ä. empfehlen, ich kenne diese Extensions und benutze sie auch. Aber ich wollte hier wirklich den Traffic selbst haben und nicht irgendwelche abgewandelten Formen davon
@Freierfall
Das wird wohl der Fall sein, weil Opera schlichtweg und einfach Formulardaten nicht abspeichert. Schonmal die Unterschiede beim Seiten-vor- und zurückblättern getestet?
@dead_orc
Okay, die Header-Analysieren hab ich weniger Erfahrung.
Hab im Moment nichtmal irgendein Programm, mit dem ich das machen könnte.
Also ja, header-Modfikation wäre wohl irgend eine möglichkeit, aber damit kenne ich mich nicht aus und was ich dazu schon gelesen habe, wegen manuellem POST-Daten anhängen hörte sich schon kompliziert genug an.
... Es sei denn PHP hat funktionen mit denen man diese Einstellungen rückgängig machen kann, nachdem man die session_start() funktion aufgerufen hat...
Ich habe das ganze jetzt also mit Cookies umgesetzt, klappt einwandfrei und die Formulardaten bleiben erhalten.
@Freierfall
Das wird wohl der Fall sein, weil Opera schlichtweg und einfach Formulardaten nicht abspeichert. Schonmal die Unterschiede beim Seiten-vor- und zurückblättern getestet?
...
Wenn ich hier im Forum was eingebe, zurückgehe, wieder vor, sind die Eingegebenen Formulardaten immer noch da.
Nach dem Aktualisieren nicht mehr
--
cats are not characteristically disposed toward voluntary aerobic exercise