2012-12-19 15 views
7

Kiedy przeglądarka wysyła informacje o nagłówku na serwer, $_SERVER['HTTP_REFERER'] powinien podać nam poprzedni adres URL?

Co wraca z $_SERVER['HTTP_REFERER'], gdy informacje o nagłówku nie są wysyłane do serwera? pusta struna? fałszywy? zero? lub ...?

+5

użyć 'var_dump ($ _ SERVER)' i przekonaj się sam. – Barmar

Odpowiedz

9

Jeśli nagłówek żądania odsyłacza HTTP nie jest wysłany, prawdopodobnie $_SERVER['HTTP_REFERER'] nie jest ustawiony, chociaż może to być pusty ciąg. To, czy zostanie w tym przypadku ustawione, czy nie, może zależeć od serwera.

jak w przypadku wszystkich nagłówków HTTP, należy sprawdzić jego istnienia podczas czytania:

$httpReferer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; 
4

$_SERVER['HTTP_REFERER'] nie jest naprawdę niezawodny, ponieważ konkretne ustawienie w przeglądarce użytkownika może go złamać. Ale tak, powinien zawierać poprzedni adres URL, a zwróci pusty ciąg znaków lub wartość NULL, gdy nagłówki nie zostaną wysłane, w zależności od konfiguracji serwera.

+0

co może być niezawodną alternatywą dla $ _SERVER ['HTTP_REFERER']? – Dheeraj

+1

@Dheeraj Nie ma niezawodnej alternatywy. 'Superglobal PHP' $ _SERVER ['HTTP_REFERER'] 'PHP po prostu zgłasza wartość ukrytego nagłówka żądania HTTP' Referer'. Jest to nagłówek żądania HTTP, który jest niewiarygodny. Dokument _referujący_ nie jest przekazywany w żaden inny sposób. – MrWhite

0

$ _SERVER jest zmienna globalna tablica, a wartość wywołującej jest elementem tablicy z kluczem HTTP_REFERER. Jeśli nagłówek referrer nie jest wysyłany przez przeglądarkę, po prostu brakuje elementu w tablicy. Możesz sprawdzić, czy tablica ma element z array_key_exists; w tym przypadku:

array_key_exists('HTTP_REFERER', $_SERVER)

-1

gdy nie jest ustawiona wartość będzie albo zerowy lub nieokreślone.

alternatywą będzie wykorzystanie

$_SERVER['REDIRECT_URL'] 
+0

'$ _SERVER ['REDIRECT_URL']' nie jest "alternatywą" dla '$ _SERVER ['HTTP_REFERER']'. Te dwie zmienne zawierają dość różne informacje. 'REDIRECT_URL' jest oryginalną ścieżką URL żądania _current_ (nie _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ __ _), jeśli nie było wewnętrznego przepisania. Jest to ustawione przez _serwer_, a nie _browser_. (Typowym przykładem użycia jest uzyskanie informacji o żądaniu, które spowodowało błąd serwera). – MrWhite

Powiązane problemy