Zum Inhalt springen

back button im browser und page reload?


etherius

Empfohlene Beiträge

warum brauchst du das ? ^^

das kommt letztlich auf den Browser, auf Einstellungen und Metainfos der Page an. Er wird so viel wie möglich aus dem Cache entnehmen und den Rest neu Anfordern.

War die Seite vorher ein Formular, kommt für gewöhnlich die Frage ob er die Formulardaten nocheinmal schicken soll.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Weiß jemand, was genau der browser tut wenn ich auf den back-button klicke? Wird die Seite neu geladen? Oder was tut der?

Wenn du den Back-Button im Browser drückst, schaut der Browser in der Liste der Seiten nach, die du zuletzt besucht hast und nimmt sich die Adresse der obersten (also die Seite vor der aktuellen) und setzt ausserdem den Zeiger in der History auf diesen Eintrag. Dann fordert er die Seite vom Webserver erneut an. Dabei prüft er, welche Daten er von der Seite schon hat bzw. von wann diese sind. Bei der Anforderung an den Server sendet er diese Infos in der Anfrage mit:

If-Modified-Since: Fri, 06 Jan 2006 14:27:46 GMT

, der Server soll die Datei nur senden, wenn sie sich geändert hat. Außerdem wird die eindeutige Datei-ID (Entitiy-Tag), die der Server mit der Datei gesendet hat mitgeschickt, mit der Aufforderung, die Datei nur zu senden, wenn es eine andere ist:

If-None-Match: "6809b-2000-43be7e62"

Der Server prüft diese Anfrage dann und sendet einen entspr. Headercode mit:

200 Ok, dann sendet der Server die Datei

304 Not Modified, dann sind die Daten, die im Cache liegen ok und nichts wird gesendet.

(alle anderen Codes bitte selber nachsehen, sind in dem Zusammenhang auch weniger wichtig)

Wenn der Client dann alle Daten hat (oder auch schon etwas früher), zeigt er dir die Seite an.

Wenn die Seite davor, also genauer die Anfrage an den Server für diese Seite, POST-Daten enthält (nicht nur bei Formularen), wird normalerweise vom Browser gefragt, ob die Anfrage erneut geschickt werden soll (und damit auch erneut die POST-Daten). Wenn Ja, läuft das praktisch wie oben ab, nur dass in der Anfrage eben noch die Daten mit dabei sind.

Eine Ausnahme ist es, wenn der Browser im Offline-Modus ist. Dann wird er keine Anfragen an den Server stellen (er arbeitet ja offline) und versuchen alles aus dem Cache zu holen.

EDIT:

Beim Page-reload (Seite aktualisieren) wird normalerweise der Cache und die Prüfung auf Änderung übergangen. Die Seite wird also komplett neu vom Server angefordert.

EDIT2:

Eine solche Anforderung an den Server wird dabei nicht nur einmal für eine Seite gemacht. Für jede Datei, die die Seite enthält, wird eine eigene Anfrage gestellt.

Beispiel:

Du hast ein HTML-Dokument. In dem Dokument hast du eine externe CSS-Datei und eine externe Javascript-Datei. Außerdem noch 2 Bilder. Der Client fordert also die HTML-Seite an, liest die dann durch und findet die Verweise auf andere Dateien. Da er die Dateien ja nicht hat oder kennt, fordert er diese auch vom Server an. Das Dokument oben würde also erst nach 5 Anfragen an den Server komplett beim Client vorliegen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was würde das jetzt in meinem konkreten Fall bedeuten?

ich habe 2 files:

index.php und

login.php

index.php übergibt per post ein formular an login.php.

login.php validiert den user

wenn ich jetzt den back-button klicke, stehen immer noch die Formulareingabefelder da; ich habe allerdings im Web schon mehrfach Seiten gesehen, die selbst beim zurück gehen eine message einblenden ... wisst ihr wie das zu realisieren ist?

mfg

Eth

Link zu diesem Kommentar
Auf anderen Seiten teilen

wenn immernoch die Formulardaten da stehen heist das evtl. das der browser die Eingaben zwischenspeichert. D.h. das hat gar nix mit der Seite zu tun, sondern mit den Browsereinstellungen.

Ich hatte eine weile den fall, das meine Eingaben auch drin' geblieben sind, jetzt nicht mehr. Je nachdem, kann es auch sein das der Browser die Eingaben behält, wenn er die Nachricht erhält das die HTML seite noch aktuell ist und nicht neu geladen werden muss.

In deinem fall kannst du auf der 2. Seite auch ein Cookie-Flag o.ä. erstellen das auf der anderen abgefragt wird, ist das Cookie-Flag vorhanden, gibt es ein automatisches Redirect über PHP

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich habe 2 files:

index.php und

login.php

[...]

ich habe allerdings im Web schon mehrfach Seiten gesehen, die selbst beim zurück gehen eine message einblenden ... wisst ihr wie das zu realisieren ist?

In der index.php prüfst du ab, ob schon eine Anmeldung vorliegt (SESSION z.B.) und wenn ja, zeigst du eine Meldung an, ansonsten die Eingabefelder.

Oder auch so:

In der Index.php die Anmeldung prüfen (wie oben) und wenn keine Anmeldung, dann Anmeldung fordern (Eingabefelder), wenn eine Anmeldung da ist, wird der Inhalt angezeigt.

Kommt aber immer drauf an, wie deine Seite aufgebaut ist und wie die Struktur der Seiten ist etc.

Link zu diesem Kommentar
Auf anderen Seiten teilen

In der index.php prüfst du ab, ob schon eine Anmeldung vorliegt (SESSION z.B.) und wenn ja, zeigst du eine Meldung an, ansonsten die Eingabefelder.

Oder auch so:

In der Index.php die Anmeldung prüfen (wie oben) und wenn keine Anmeldung, dann Anmeldung fordern (Eingabefelder), wenn eine Anmeldung da ist, wird der Inhalt angezeigt.

Ich seh vielleicht blöd aus, aber so schlimm isses dann doch wieder nich *ggg*

Das austauschen mache ich ja auch, solange ich nach dem login nicht auf den back-button klicke funktioniert das auch.

Es geht mir darum, dass wenn ich mich einlogge, und DANN SOFORT auf den back-button klicke, (obwohl ich an dieser stelle eingeloggt bin) die eingabefelder angezeigt werden.

Ich habe das mal getestet, mit einem echo aus php raus wenn ich eingeloggt bin. Die ausgabe taucht beim zurück gehen nicht auf, beim vorwärts gehen schon, daher gehe ich davon aus, dass er die Seite beim Server überhaupt nicht neu anfragt ...

mfg

Eth

Link zu diesem Kommentar
Auf anderen Seiten teilen

mit
<meta http-equiv="cache-control" content="no-cache">

müsste es doch erzwingbar sein dass die seite immer neu geladen wird oder?

Ich werd es nach Feierabend zu Hause mal testen, hab den code selbst jetzt nicht hier ... allerdings meine ich ich hatte die ganzen cache control sachen schon durch.

ich werd aber trotzdem mal schauen ... vielleicht schick ich das auch als http header ...

mfg

Eth

Link zu diesem Kommentar
Auf anderen Seiten teilen


<meta http-equiv="cache-control" content="no-cache">

Also irgendwie funzt das so auch nicht wirklich, ich hab auch nochmal

header("Cache-Control: no-cache, must-revalidate");

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

probiert ... Auf jeden Fall gehts beim FF1.5 nicht ... Wenn ich den back-Button benutze, wird die Seite nicht neu geladen und die Formularfelder sind trotzdem noch da ... Im MOZ1.0 (lol, hab grad keinen 1.7er da^^) und im Opera funzt es auch nicht ...

Im IE6 funktioniert das aber einwandfrei ... beim back klick sind die Eingabefelder weg ... "You are logged in as:" ...

woran liegt das? Was mache ich falsch???

mfg

Eth

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mein Problem hat einen leicht ähnlichen Hintergrund. Ich habe mir ein Forum geschrieben und eine Datei newpost.php in der der User seinen Text in ein Formular schreibt. Anschließend wird der Text und ein paar andere Sachen per Post an eine Zwischenseite posting.php übergeben, die das Ganze in die Datenbank einträgt und den User dann zum Post weiterleitet.

Das Problem ist jetzt, dass mich der Browser fragt ob ich die Post-Werte nochmal übergeben will, wenn ich den Backbutton benutze. Das soll aber nicht passieren, da sonst der Post wieder eingetragen wird. Kann ich das irgendwie unterdrücken?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das Problem ist jetzt, dass mich der Browser fragt ob ich die Post-Werte nochmal übergeben will, wenn ich den Backbutton benutze. Das soll aber nicht passieren, da sonst der Post wieder eingetragen wird. Kann ich das irgendwie unterdrücken?

Nein, denn das macht der Browser immer, wenn er eine Anfrage mit POST-Daten wiederholen soll.

Was du aber machen kannst ist, dein Skript entsprechend zu ändern. Z.B. könntest du, wenn der Benutzer einen neuen Beitrag schreiben will in der Session eine zufällige ID hinterlegen. Diese ID sendest du mit den POST-Daten (Hidden-Feld im Formular z.B.) und wenn due Daten geschrieben werden löschst du diese ID in der SESSION.

Wenn er jetzt die Daten ein zweites mal sendet, merkst du an der Ungleicheit der IDs, dass da was nicht stimmt und speicherst die Daten nicht ab.

Mal als Idee.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, schon nicht schlecht aber irgendwie gefällt mir das noch nicht so ganz. Die Abfrage ob die POST-Sachen nochmal geschickt werden sollen nervt.

Ich hab mir das gerade mal im Orion phpBB angesehen. Da wird die Postingseite beim zurück gehen einfach übersprungen. Wird da die History vom Browser geändert? Aber dann kann es ja nicht browserübergreifend sein, oder?

Der Quellcode ist auch zu komplex um mir die Lösung da raus zu suchen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wird da die History vom Browser geändert? Aber dann kann es ja nicht browserübergreifend sein, oder?

Der Quellcode ist auch zu komplex um mir die Lösung da raus zu suchen.

Kann ich jetzt nix dazu sagen, hab meine phpBBs nicht mehr am laufen. Wenn es aber geändert werden sollte, muss es in Javascript gemacht werden, also such im Quelltext nach Javascript bzw. zum Testen einfach das Ganze mal mit abgeschaltetem Javascript probieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe gerade mal probiert. Das funktioniert auch ohne JavaScript. Allerdings habe ich gerade gesehen das im phpBB die Seite in der man schreibt und die Seite, die das ganze in die Datenbank speichert die gleiche ist.

Trotzdem, wenn man zurück geht hat die seite auch die GET-Parameter vom Zustand zum schreiben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Trotzdem, wenn man zurück geht hat die seite auch die GET-Parameter vom Zustand zum schreiben.

Natürlich hat sie das, weil du ja die gleiche URL nochmal aufrust. Das Skript prüft dann eben, ob du auch wirklich schreiben "willst" bzw. darfst (vielleicht ja ähnlich wie mein Vorschlag oben).

Mehr kann ich dir dazu nicht sagen, phpBB hab ich nicht mehr laufen und werd es jetzt nicht wieder ausgraben dafür ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nein, die Seite heißt posting.php. Wenn man schreibt wird posting.php?mode=reply aufgerufen und wenn das dann per POST an die gleiche Datei gegeben wird, hat sie keine Parameter als nur posting.php. Wenn man dann auf Zurück klickt hat sie aber wieder mode=reply.

Also:

posting.php?mode=reply -> Absenden

posting.php -> Post eingetragen

threadview.php -> Post ist zu sehen, Zurück-Button

posting.php?mode=reply

Oder hab ich was vercheckt. Also eigentlich müsste sie ja wieder ohne Parameter aufgerufen werden wenn man Zurück drückt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...