$_GET-Anhang aus Adresszeile entfernen
Paul
- php
Hallo,
wie der Betreff schon sagt möchte ich den GET-Anhang aus der Adresszeile entfernen.
Grund:
Ich übergeben diverse Informationen über GET, z. B.:
<a href="index.php?action=goto&direction=next">Weiter</a>
Das Skript in der index.php wertet es aus und reagiert, z. B.:
if ($_GET["action"] == "goto" {
if ($_GET["direction"] == "next" {
showNextUserList();
}
}
Wenn das Skript nun fertig ist und die neue Seite fertig geladen ist, bleibt in der Adresszeile in diesem Fall "http://domain.de/index.php?action=goto&direction=next" stehen. Drückt man jetzt die F5-Taste so wird also das Skript nochmal mit den selben parameter ausgeführt - was nicht erwümscht ist.
Meine Idee also: Ich lösche die Parameter nach der Verarbeitung aus der Adresszeile - nur wie?
Oder gibt's da eine bessere Möglichkeit?
MFG Paul
Meine Idee also: Ich lösche die Parameter nach der Verarbeitung aus der Adresszeile - nur wie?
parameter löschen geht nicht
Oder gibt's da eine bessere Möglichkeit?
script abarbeiten und dann redirect auf seite ohne parameter ist eine möglichkeit
Ich weiß zwar nicht ob dass Dir weiterhilft, aber versuchs doch mal mit POST statt GET.
Ich weiß zwar nicht ob dass Dir weiterhilft, aber versuchs doch mal mit POST statt GET.
das hilft auch nicht, beim F5-drücken wird halt die POST-Anfrage nochmal abgeschickt ;)
Hallo suit,
das hilft auch nicht, beim F5-drücken wird halt die POST-Anfrage nochmal abgeschickt ;)
Eben nicht. Dann wird der Benutzer gefragt, ober die vorherige Aktion nochmal durchführen will.
Besser ist aber immer noch ein Redirect.
Jonathan
Hallo suit,
das hilft auch nicht, beim F5-drücken wird halt die POST-Anfrage nochmal abgeschickt ;)
Eben nicht. Dann wird der Benutzer gefragt, ober die vorherige Aktion nochmal durchführen will.
die vorherige aktion ist "blah blah blah post daten gesendet, wollen sie das nochmal tun"? klar ist eine zwischenabfrage, bei get nicht - aber es läuft aufs selbe raus
Besser ist aber immer noch ein Redirect.
sagte ich in meinem anderen post bereits, aber die frage nach der sinnhaftigkeit stellt sich mir in diesem fall
die frage ist, was diese get parameter überhaupt machen - sprich ist es ein echter url oder ein scriptinterner request der sowieso nicht in der adresszeile stehen sollte?
Hello,
Ich weiß zwar nicht ob dass Dir weiterhilft, aber versuchs doch mal mit POST statt GET.
Post sendet beim Reload auch dieselben Parameter nochmals mit.
Man kann zwar mit den Cacheeinstellungen herumspielen, nur weiß man dann trotzdem noch nicht, ob sich der Browser daran hält.
Ein harzliches Glückauf
Tom vom Berg
Hello,
Wenn das Skript nun fertig ist und die neue Seite fertig geladen ist, bleibt in der Adresszeile in diesem Fall "http://domain.de/index.php?action=goto&direction=next" stehen. Drückt man jetzt die F5-Taste so wird also das Skript nochmal mit den selben parameter ausgeführt - was nicht erwümscht ist.
Du könntest dem Script beibringen, dass es auf dieselben Parameter nicht noch einmal reagiert, sondern sich dann so verhält, als hätte es keine.
Dazu baust Du einen Key in die URL ein, der in einer Sperrliste registiert wird.
Wenn er einmal abgearbeitet wurde, wird er ungültig.
Ein harzliches Glückauf
Tom vom Berg
Hi,
<a href="index.php?action=goto&direction=next">Weiter</a>
Das Skript in der index.php wertet es aus und reagiert, z. B.:
gaaanz schlechtes Konzept.
HTTP ist zustandslos. Das heißt, dass jeder in HTTP stattfindende Aufruf - beispielsweise durch eine URL - immer unabhängig von allem ist(!), was eventuell mal geschehen sein mag und/oder geschehen wird. Deine URL muss *immer* das selbe[1] Ergebnis liefern. Mit einem "next" fehlt Dir der Kontext: Das nächste von was?
Baue also eine URL auf, die auch bei einem Aufruf in drei Wochen noch das liefert, was heute mit ihr zu erwarten ist.
Cheatah
[1] Nicht Bit für Bit, sondern sinngemäß, also beispielsweise immer "die Liste der aktuellen Nachrichten".
Hi Cheatah!
HTTP ist zustandslos. Das heißt, dass jeder in HTTP stattfindende Aufruf - beispielsweise durch eine URL - immer unabhängig von allem ist(!), was eventuell mal geschehen sein mag und/oder geschehen wird. Deine URL muss *immer* das selbe[1] Ergebnis liefern. Mit einem "next" fehlt Dir der Kontext: Das nächste von was?
Hau mich net, aber genau dafür werden doch Sessions verwendet, dass die Reaktion eben nicht unabhängig vom vorherigen Geschehen ist,oder?
Grüsse,
Richard
Hallo ritschmanhard,
Hau mich net, aber genau dafür werden doch Sessions verwendet, dass die Reaktion eben nicht unabhängig vom vorherigen Geschehen ist,oder?
Natürlich kann man Sessions und Cookies verwenden. Das ändert jedoch nichts dran, dass so ein Next-Verweis ziemlicher Unfug ist. Man kann ihn nicht Bookmarken, nicht an andere Leute schicken usw.
Deshalb sollten normale GET-Abfragen immer das gleiche Ergebnis liefern (nicht unbedingt Bitgenau, wie Cheatah beschieb). Ansonsten nimmt man POST. Und wenn man nicht will, dass nach einem erfolgreichen POST-Aufruf aktualisiert werden kann, redirectet man den Benutzer (ein HTTP-Header-Redirect ist am sinnvollsten) nach dem Verarbeiten der Daten auf eine andere Seite (in einem Forum steht da dann z.B. häufig "Ihr Posting ist jetzt im Forum lesbar, blabla"). Eventuell muss man trotzdem serverseitig Maßnahmen implementieren, dass nicht zuviele Formulare hintereinander abgeschickt werden.
Jonathan
Hi,
Hau mich net, aber genau dafür werden doch Sessions verwendet, dass die Reaktion eben nicht unabhängig vom vorherigen Geschehen ist,oder?
ja. Das ändert aber nichts daran, dass die URL unter allen Umständen das (erwartungsgemäß) selbe zu liefern hat - und nicht plötzlich etwas anderes, wenn man mal den Reload-Button betätigt, mit dem Back-Button zurück geht und einen hyperinaktiven Cache besitzt, oder aber auch die Seite bookmarkt. Wenn eine Session im Spiel ist, gilt die Aussage innerhalb der Session - aber sie gilt.
Cheatah
Hi,
<a href="index.php?action=goto&direction=next">Weiter</a>
Das Skript in der index.php wertet es aus und reagiert, z. B.:gaaanz schlechtes Konzept.
HTTP ist zustandslos. Das heißt, dass jeder in HTTP stattfindende Aufruf - beispielsweise durch eine URL - immer unabhängig von allem ist(!), was eventuell mal geschehen sein mag und/oder geschehen wird. Deine URL muss *immer* das selbe[1] Ergebnis liefern. Mit einem "next" fehlt Dir der Kontext: Das nächste von was?
Baue also eine URL auf, die auch bei einem Aufruf in drei Wochen noch das liefert, was heute mit ihr zu erwarten ist.
Cheatah
[1] Nicht Bit für Bit, sondern sinngemäß, also beispielsweise immer "die Liste der aktuellen Nachrichten".
Dies soll ja auch nicht der Fall sein. Die Blätterfunktion ist in einem abgesicherten Bereich und wird von einem Objekt zur Verfügung gestellt, dass sich auch die aktuelle Position merkt. Sobalt man sich abmeldet wird das Objekt gelöscht und somit ist die Funktion nicht mehr verfügbar.
wie der Betreff schon sagt möchte ich den GET-Anhang aus der Adresszeile entfernen.
Das macht mich neugierig.
Wenn das Skript nun fertig ist und die neue Seite fertig geladen ist, bleibt in der Adresszeile in diesem Fall "http://domain.de/index.php?action=goto&direction=next" stehen. Drückt man jetzt die F5-Taste so wird also das Skript nochmal mit den selben parameter ausgeführt - was nicht erwümscht ist.
Warum nicht erwünscht? Schliesslich liefert ja gerade diese Url eine bestimmte Ausgabe, die ja auch normalerweise reproduzierbar sein soll.
Bei Formularen die nur einmal benutzt werden sollen, ist das klar, da bedient man sich ja dann auch gewisser Sperrroutinen, aber bei einer normalen Abfrage, wie zb. eine Blätterfunktion sehe ich keinen Grund.
Aber da du bestimmt einen guten Grund hast, würde mich diese interessieren, vielleicht muss ich dann auch nochmal einige Projekte überdenken.
Ina
Was willst du den machen?
Ich weiß es nicht genau deswegen kann es sein das ich mist schreibe.
Versuch doch mit Sessions zu arbeiten die haben keinen Einfluss auf die url.
<?php session_start();
?>