Redirect pagina precedente in php

Giorgio Borelli

Come implementare un redirect alla pagina precedente in PHP? Restiamo in tema delle funzionalità di navigazione nel nostro sito web, sapere da quale pagina proviene un navigatore o reindirizzarlo all'ultima pagina visitata, in php è molto semplice, basta sfruttare la variabile server globale $_SERVER['HTTP_REFERER'], andiamo a vedere come fare.

Quando navighiamo con il nostro browser, da un sito ad un altro, o tra le pagine di uno stesso sito; il Browser può conservare il valore dell'url (indirizzo) della pagina dalla quale si proviene, detto valore prende il nome di HTTP_REFERER, ed in php vi si può accedere tramite l'array associativo delle variabili server super globali, ossia $_SERVER.

Quindi per conoscere il REFERER, la pagina dalla quale proviene il navigatore che arriva sul nostro sito, in php basta scrivere:

<?php
echo $_SERVER['HTTP_REFERER'];
?>

Avendo il valore del referral o pagina precedente (interna o esterna al nostro sito), implementare un redirect alla pagina precedente in php è davvero un gioco da ragazzi, scriveremo

<?php
header('Location: ' . $_SERVER['HTTP_REFERER']);
exit();
?>

Aggiungete la chiamata alla funzione exit(), per interrompere l'interprete php nella lettura dell'eventuale codice sottostante all'header.

Questo è quanto, non serve altro per implementare un redirect alla pagina precedente in php, troppo semplice per essere vero, infatti bisogna stare attenti con l'uso di HTTP_REFERER, ci sono delle problematiche da conoscere.

Il valore di HTTP_REFERER non è sempre settato, dipende dallo user agent (il browser) che interroga il web server, alcuni browser possono essere configurati per non passare il valore di HTTP_REFERER o eventualmente modificarlo, pertanto l'uso di HTTP_REFERER per implementare il redirect non è sempre affidabile al 100%, potrebbe capitarvi che inspiegabilmente HTTP_REFERER non funzioni, ricevendo la seguente notifica dall'interprete php:

Notice: Undefined index: HTTP_REFERER in nomefile.php

Invece la spiegazione c'è, e noi sappiamo quale, HTTP_REFERER non è settata, quindi il suo valore non esiste.

N.B. Abbiamo detto che il valore di HTTP_REFERER può non essere settato, e questo dipende dal browser e/o dalla sua configurazione, in altro modo alcuni programmi esterni possono intervenire sul browser e modificarne il valore, ma soprattutto è importante sapere che indipendentemente da tutto ciò, se digitate la URL direttamente nell'indirizzo web la HTTP_REFERER non verrà impostata indipendentemente dalla configurazione del browser o meno e risulterà pertanto nulla.

Quindi, se decidiamo di usare la HTTP_REFERER per fare un torna indietro o un torna alla pagina precedente in php, dobbiamo quanto meno verificare che sia settata correttamente, in questo modo:

<?php
if(isset($_SERVER['HTTP_REFERER']))
    echo $_SERVER['HTTP_REFERER'];
?>

Con isset controlliamo che la super variabile globale $_SERVER['HTTP_REFERER'] sia settata correttamente.

Concludiamo dicendo che si può usare HTTP_REFERER per un redirect in php, in molti casì funzionerà correttamente, ma non è affidabile al 100%, e sebbene io prediliga quasi sempre le soluzioni lato server, in questo caso sarebbe meglio affidarsi alle history API Javascript, o quanto meno effettuare sempre un controllo sul valore di HTTP_REFERER ed optare per una soluzione ibrida, scrivendo in questo modo:

<?php
if(isset($_SERVER['HTTP_REFERER']))
    header('Location: ' . $_SERVER['HTTP_REFERER']);
else
    header("location:javascript://history.back()");
?>

Se qualcuno ha ancora problemi con HTTP_REFERER che non funziona, oppure volesse aggiungere qualcosa o porre ulteriori domande su come implementare un redirect alla pagina precedente in php, può farlo tramite lo spazio dei commenti, ogni vostro intervento sarà gradito e contribuirà ad accrescere la discussione.

Categorie: Browser | PHP

Tags:

Aggiungi Commento

biuquote
Loading