Torna alla pagina precedente con intestazione ("Posizione:"); in PHP


124

Il titolo di questa domanda spiega in qualche modo la mia domanda. Come reindirizzo il visitatore della pagina PHP alla pagina precedente con l'estensioneheader( "Location: URL of previous page" );


intestazione ("Ubicazione:". $ _SERVER ["HTTP_REFERER"]);
raskul

Secondo questa fonte w3schools.com/php/php_superglobals_server.asp , non è affidabile perché non tutti i fornitori lo supportano
mohadennis

Risposte:


246

provare:

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

Si noti che questo potrebbe non funzionare con le pagine protette (HTTPS) ed è una pessima idea nel complesso poiché l'intestazione può essere dirottata, inviando l'utente a un'altra destinazione. L'intestazione potrebbe non essere nemmeno inviata dal browser.

Idealmente, vorrai:

  • Aggiungi l'indirizzo di ritorno alla richiesta come variabile di query (es.? Back = / list)
  • Definisci una pagina di ritorno nel tuo codice (ad es. Tutti gli invii di moduli riusciti vengono reindirizzati alla pagina dell'elenco)
  • Fornire all'utente l'opzione di dove desidera andare dopo (es. Salva e continua a modificare o semplicemente Salva)

19
Sono successe cose più strane :)
Dimitry

3
@Col così puoi dimostrare un problema pratico con questo?
Pekka

1
L'utilizzo del referer, dopo aver testato preventivamente se è impostato e valido, in un contesto da pagina a pagina definito può essere una pratica perfettamente accettabile: la stragrande maggioranza dei browser invia un HTTP_REFERER appropriato.
Pekka

1
@Col L'ho usato in produzione quando dovevo fare qualcosa per una demo. Come puoi vedere dalla mia risposta, fornisco altre tre soluzioni a cui mi rivolgo invece del reindirizzamento basato su HTTP_REFERER.
Dimitry

2
@ Madmartigan che suona come un comportamento davvero strano, l'unico suggerimento che posso vedere in rete che lo causa sono alcuni problemi di reindirizzamento. Ad ogni modo, sono d'accordo che usare il referer non è il modo se hai bisogno di sicurezza al 100%
Pekka

22

È così semplice, usa questo

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

Funziona bene per me


2
Sembrava davvero intelligente, ma in FF10 ottengo "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."Quindi questo è fondamentalmente inutilizzabile.
Wesley Murch

Wesley Murch, per me funziona bene in quasi tutti i principali browser, incluso quello che hai citato. Funziona solo per te solo nel caso in cui sei arrivato alla pagina con qualcosa nella storia.
Hammad

5
Ciò può far sì che la pagina precedente venga servita dalla cache del browser.
aksu

14

Devi salvare quella posizione in qualche modo.

Diciamo che è un modulo POST, metti semplicemente la posizione corrente in un campo nascosto e quindi usalo in header()Posizione.


14

Solo una piccola aggiunta: credo che sia una cosa comune e nota da aggiungere exit;dopo la funzione di intestazione nel caso in cui non vogliamo che il resto del codice venga caricato o eseguito ...

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

È solo "" per me.
Alexander Guo

2

Prova questo in Javascript:

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

Oppure puoi provarlo in PHP:

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

1

La memorizzazione dell'URL precedente in una variabile di sessione non è valida, perché l'utente potrebbe fare clic con il pulsante destro del mouse su più pagine e poi tornare indietro e salvare.

a meno che non si salvi l'URL precedente nella variabile di sessione in un campo nascosto nel modulo e dopo aver salvato l'intestazione ("Posizione: salva l'URL della pagina chiamante");


perché non possiamo semplicemente usare $ _SERVER ['http_referrer']?
Vignesh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.