Czy uzyskać odwołanie do oryginalnego adresu URL w PHP?

110

Używam, $_SERVER['HTTP_REFERER'];aby uzyskać adres URL strony referencyjnej. Działa zgodnie z oczekiwaniami, dopóki użytkownik nie kliknie innej strony, a osoba odsyłająca nie przejdzie do ostatniej strony.

Jak zapisać oryginalny odsyłający adres URL?

Keith Donegan
źródło

Odpowiedzi:

137

Przechowuj go w pliku cookie (jeśli jest to akceptowalne w Twojej sytuacji) lub w zmiennej sesji.

session_start();

if ( !isset( $_SESSION["origURL"] ) )
    $_SESSION["origURL"] = $_SERVER["HTTP_REFERER"];
Sampson
źródło
13
Zwróć uwagę na radę @pcp w odpowiedzi poniżej!
d -_- b
6
Zauważ, że powinieneś również sprawdzić, czy http_refereristnieje, ponieważ często tak nie jest, co może spowodować błąd „Niezdefiniowany indeks”.
Justin
17

Jak zasugerował Johnathan, chciałbyś zapisać go w pliku cookie lub sesji.

Najłatwiejszym sposobem byłoby użycie zmiennej sesji.

session_start();
if(!isset($_SESSION['org_referer']))
{
    $_SESSION['org_referer'] = $_SERVER['HTTP_REFERER'];
}

Umieść to na górze strony, a zawsze będziesz mieć dostęp do pierwszego referer, przez który skierował odwiedzający witrynę.

Tyler Carter
źródło
4

Przechowuj go w pliku cookie, który trwa tylko podczas bieżącej sesji przeglądania

Matt
źródło
4

Używanie Cookie jako repozytorium strony referencyjnej jest w większości przypadków znacznie lepsze, ponieważ pliki cookie będą przechowywać stronę odsyłającą do zamknięcia przeglądarki (i zachowają ją nawet, jeśli karta przeglądarki jest zamknięta), więc w przypadku, gdy użytkownik zostawił stronę otwartą, powiedzmy przed weekendami i wrócisz do niego po kilku dniach, Twoja sesja prawdopodobnie wygaśnie, ale pliki cookie nadal tam będą.

Umieść ten kod na początku strony (przed jakimkolwiek wyjściem html, ponieważ pliki cookie będą poprawnie ustawione tylko przed jakimkolwiek echem / printem):

if(!isset($_COOKIE['origin_ref']))
{
    setcookie('origin_ref', $_SERVER['HTTP_REFERER']);
}

Następnie możesz uzyskać do niego dostęp później:

$var = $_COOKIE['origin_ref'];

Oprócz tego, co @pcp zasugerował na temat ucieczki $ _SERVER ['HTTP_REFERER'], podczas korzystania z plików cookie możesz również chcieć uciec $ _COOKIE ['origin_ref'] przy każdym żądaniu.

Kainax
źródło
-4

Spróbuj tego

(isset ($_SERVER['HTTP_CLIENT_IP']) ? 
    $_SERVER['HTTP_CLIENT_IP'] : 
    (isset ($_SERVER['HTTP_X_FORWARDED_FOR']) ? 
        $_SERVER['HTTP_X_FORWARDED_FOR'] : 
        $_SERVER['REMOTE_ADDR']
    )
)
user11688571
źródło
Chodzi o zdobycie, IP ADDRESSale post dotyczy REFERERstrony internetowej, która doprowadziła do tej, o której mowa.
Sanxofon