$ _SERVER ['HTTP_REFERER']丢失了

San*_*nki 40 php

我想$_SERVER['HTTP_REFERER']在我的网站上使用,但我得到以下内容:

Notice: Undefined index: HTTP_REFERER 
Run Code Online (Sandbox Code Playgroud)

我试过打印$_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] => root@localhost
    [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
)
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我找到HTTP_REFERER或建议替代方案HTTP_REFERER吗?

小智 43

从文档:

将用户代理引用到当前页面的页面地址(如果有).这是由用户代理设置的.并非所有用户代理都会设置此功能,有些用户可以将HTTP_REFERER修改为功能.简而言之,它无法真正被信任.

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


Wea*_*nds 31

当Web浏览器从一个网站移动到另一个网站以及网站的页面之间时,它可以选择传递它来自的URL.这称为HTTP_REFERER,因此如果您不从一个页面重定向到另一个页面,它可能会丢失

如果已设置HTTP_REFERER,则会显示它.如果不是那么你什么都看不到.如果未设置并且您将错误报告设置为显示通知,则会看到类似这样的错误:

 Notice: Undefined index: HTTP_REFERER in /path/to/filename.php
Run Code Online (Sandbox Code Playgroud)

为了防止在通知开启时出现此错误(我总是在通知的情况下开发),您可以这样做:

  if(isset($_SERVER['HTTP_REFERER'])) {
      echo $_SERVER['HTTP_REFERER'];
   }
Run Code Online (Sandbox Code Playgroud)

要么

 echo isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
Run Code Online (Sandbox Code Playgroud)

使用$ _SERVER ['HTTP_REFERER']超全局变量将HTTP_REFERER变量用于记录等目的非常有用.但重要的是要知道它并不总是这样设置,所以如果您使用通知进行编程,那么您需要在代码中允许这样做


Tch*_*upi 9

你可以而且永远不应该假设$_SERVER['HTTP_REFERER']存在.

如果您控制上一页,则可以将URL作为参数传递"site.com/page2.php?prevUrl=".urlencode("site.com/page1.php").

如果您不控制页面,那么您无能为力.


Wea*_*ped 6

Referer不是强制标题.它可能存在也可能不存在或可能被修改/虚构.依靠它自担风险.无论如何,你应该包装你的调用,这样你就不会得到一个未定义的索引错误:

$server = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : "";
Run Code Online (Sandbox Code Playgroud)