Подтвердить что ты не робот

$ _SERVER ['HTTP_REFERER'] отсутствует

Я хочу использовать $_SERVER['HTTP_REFERER'] на моем сайте, но я получаю следующее:

Notice: Undefined index: HTTP_REFERER 

Я пробовал распечатать $_SERVER. Это выдает следующее:

Array
(
    [HTTP_HOST] => 192.168.1.10
    [HTTP_USER_AGENT] => Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0
    [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    [HTTP_ACCEPT_LANGUAGE] => en-us,en;q=0.5
    [HTTP_ACCEPT_ENCODING] => gzip, deflate
    [HTTP_CONNECTION] => keep-alive
    [PATH] => /sbin:/usr/sbin:/bin:/usr/bin
    [SERVER_SIGNATURE] => Apache/2.2.3 (CentOS) Server at 192.168.1.10 Port 80
    [SERVER_SOFTWARE] => Apache/2.2.3 (CentOS)
    [SERVER_NAME] => 192.168.1.10
    [SERVER_ADDR] => 192.168.1.10
    [SERVER_PORT] => 80
    [REMOTE_ADDR] => 192.168.1.77
    [DOCUMENT_ROOT] => /var/www/html
    [SERVER_ADMIN] => [email protected]
    [SCRIPT_FILENAME] => /var/www/html/sandeep/test/hash.php
    [REMOTE_PORT] => 53851
    [GATEWAY_INTERFACE] => CGI/1.1
    [SERVER_PROTOCOL] => HTTP/1.1
    [REQUEST_METHOD] => GET
    [QUERY_STRING] => 
    [REQUEST_URI] => /sandeep/test/hash.php
    [SCRIPT_NAME] => /sandeep/test/hash.php
    [PHP_SELF] => /sandeep/test/hash.php
    [REQUEST_TIME] => 1347365919
)

Может ли кто-нибудь помочь мне найти HTTP_REFERER или предложить альтернативу HTTP_REFERER?

4b9b3361

Ответ 1

Из документации:

Адрес страницы (если таковой имеется), которая ссылалась на пользовательский агент на текущая страница. Это устанавливается пользовательским агентом. Не все пользовательские агенты будут установите это, а некоторые предоставляют возможность изменять HTTP_REFERER как особенность. Короче говоря, на него нельзя действительно доверять.

http://php.net/manual/en/reserved.variables.server.php

Ответ 2

Когда веб-браузер перемещается с одного веб-сайта на другой и между страницами веб-сайта, он может необязательно передавать URL-адрес, из которого он пришел. Это называется HTTP_REFERER, поэтому, если вы не перенаправляете с одной страницы на другую, это может отсутствовать.

Если HTTP_REFERER установлен, он будет отображаться. Если это не так, вы ничего не увидите. Если он не установлен и у вас есть отчет об ошибках, установленный для отображения уведомлений, вместо этого вы увидите ошибку:

 Notice: Undefined index: HTTP_REFERER in /path/to/filename.php

Чтобы предотвратить эту ошибку при включении уведомлений (я всегда разрабатываю с уведомлениями), вы можете сделать это:

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

ИЛИ

 echo isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

Полезно использовать переменную HTTP_REFERER для ведения журналов и т.д., используя суперглобальную переменную $_SERVER ['HTTP_REFERER']. Однако важно знать, что он не всегда устанавливается так, если вы программируете с уведомлениями, тогда вам нужно будет это сделать в своем коде

Ответ 3

Вы можете и не должны предполагать, что $_SERVER['HTTP_REFERER'] будет присутствовать.

Если вы контролируете предыдущую страницу, вы можете передать URL-адрес в качестве параметра "http://site.com/page2.php?prevUrl=".urlencode("http://site.com/page1.php"). Если вы не контролируете страницу, то вы ничего не можете сделать.

Ответ 4

Referer не является обязательным заголовком. Он может быть или не быть там или может быть изменен/фиктивный. Положитесь на него на свой страх и риск. В любом случае, вы должны обернуть свой звонок, чтобы не получить индексную ошибку undefined:

$server = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "";

Ответ 5

function redirectHome($theMsg, $url = null, $seconds = 3) {
    if ($url === null) {
        $url = 'index.php';
        $link = 'Homepage';
    } else {
        if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] !== '') {
            $url = $_SERVER['HTTP_REFERER'];
            $link = 'Previous Page';
        } else {
            $url = 'index.php';
            $link = 'Homepage';
        }
    }
    echo $theMsg;
    echo "<div class='alert alert-info'>You Will Be Redirected to $link After $seconds Seconds.</div>";
    header("refresh:$seconds;url=$url");
    exit();
}

Ответ 6

При

$_SERVER['HTTP_REFERER']

не удается, попробуйте

getenv('HTTP_REFERER')

Это может сработать для вас.

Ответ 7

Почему бы не использовать функцию php Ignore Error для установки переменных?

$ref = @$_SERVER["HTTP_REFERER"];

Также работает над GET/POST

$option = @$_GET["foo"];