Zurück zur vorherigen Seite mit Kopfzeile ("Ort:"); in PHP


Antworten:


246

Versuchen:

header('Location: ' . $_SERVER['HTTP_REFERER']);

Beachten Sie, dass dies möglicherweise nicht mit sicheren Seiten (HTTPS) funktioniert und insgesamt eine ziemlich schlechte Idee ist, da der Header entführt werden kann und der Benutzer an ein anderes Ziel gesendet wird. Der Header wird möglicherweise nicht einmal vom Browser gesendet.

Idealerweise möchten Sie entweder:

  • Hängen Sie die Absenderadresse als Abfragevariable an die Anforderung an (z. B.? Back = / list).
  • Definieren Sie eine Rückgabeseite in Ihrem Code (dh alle erfolgreichen Formularübermittlungen werden auf die Listenseite umgeleitet).
  • Geben Sie dem Benutzer die Option, wohin er als Nächstes gehen möchte (z. B. Speichern und weiter bearbeiten oder einfach speichern).

19
Es sind seltsamere Dinge passiert :)
Dimitry

3
@Col, damit Sie ein praktisches Problem damit beweisen können?
Pekka

1
Die Verwendung des Referers in einem definierten Kontext von Seite zu Seite kann nach vorherigem Testen, ob er festgelegt und gültig ist, durchaus akzeptabel sein - die überwiegende Mehrheit der Browser sendet einen ordnungsgemäßen HTTP_REFERER mit.
Pekka

1
@Col Ich habe dies in der Produktion verwendet, als ich etwas für eine Demo erledigen musste. Wie Sie meiner Antwort entnehmen können, biete ich anstelle der auf HTTP_REFERER basierenden Umleitung drei weitere Lösungen an, an die ich mich wenden würde.
Dimitry

2
@Madmartigan, das klingt nach wirklich seltsamem Verhalten. Der einzige Hinweis, den ich im Internet sehen kann, der es verursacht, sind einige Umleitungsprobleme. Wie auch immer, ich stimme zu, dass die Verwendung des Referers nicht der richtige Weg ist, wenn Sie 100% ige Sicherheit benötigen
Pekka

22

Es ist so einfach, benutze dies einfach

header("location:javascript://history.go(-1)");

Es funktioniert gut für mich


2
Das klang wirklich klug, aber in FF10 verstehe ich "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."Das ist also im Grunde unbrauchbar.
Wesley Murch

Wesley Murch, es funktioniert gut für mich in fast allen wichtigen Browsern, einschließlich dem, den Sie erwähnt haben. Es funktioniert nur für Sie, wenn Sie auf die Seite gekommen sind, die etwas in der Geschichte hat.
Hammad

5
Dies kann dazu führen, dass die vorherige Seite aus dem Browser-Cache bereitgestellt wird.
Aksu

14

Sie müssen diesen Ort irgendwie speichern.

Angenommen, es handelt sich um ein POST-Formular. Geben Sie einfach den aktuellen Speicherort in ein ausgeblendetes Feld ein und verwenden Sie ihn dann im Speicherort header().


14

Nur eine kleine Ergänzung: Ich glaube, es ist eine übliche und bekannte Sache, exit;nach der Header-Funktion hinzuzufügen, falls wir nicht möchten, dass der Rest des Codes geladen oder ausgeführt wird ...

header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;

Es ist nur "" für mich.
Alexander Guo

2

Versuchen Sie dies einfach in Javascript:

 $previous = "javascript:history.go(-1)";

Oder Sie können es in PHP versuchen:

if(isset($_SERVER['HTTP_REFERER'])) {
    $previous = $_SERVER['HTTP_REFERER'];
}

1

Das Speichern der vorherigen URL in einer Sitzungsvariablen ist fehlerhaft, da der Benutzer möglicherweise mit der rechten Maustaste auf mehrere Seiten klickt und dann zurückkommt und speichert.

es sei denn, Sie speichern die vorherige URL in der Sitzungsvariablen in einem ausgeblendeten Feld im Formular und nach dem Speichern des Headers ("Speicherort: URL der aufrufenden Seite speichern");


Warum können wir nicht einfach $ _SERVER ['http_referrer'] verwenden?
Vignesh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.