【问题标题】:Result from $_SERVER['HTTP_REFERER'], when referer header is not sent to server来自 $_SERVER['HTTP_REFERER'] 的结果,当引用标头未发送到服务器时
【发布时间】:2012-12-19 08:30:26
【问题描述】:

当浏览器向服务器发送标头信息时,$_SERVER['HTTP_REFERER'] 应该给我们上一页的 URL 对吧?

当标头信息未发送到服务器时,$_SERVER['HTTP_REFERER'] 会返回什么?空字符串?错误的?空值?还是……?

【问题讨论】:

  • 使用var_dump($_SERVER) 自己看看。

标签: php url http-headers


【解决方案1】:

如果未发送 HTTP 引用请求标头,则 $_SERVER['HTTP_REFERER'] 可能未设置,尽管它可能是空字符串。在这种情况下是否设置可能取决于服务器。

与所有 HTTP 请求标头一样,在阅读时检查其是否存在:

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

【讨论】:

  • 更快的方法是:$httpReferer = $_SERVER['HTTP_REFERER'] ??空;
【解决方案2】:

$_SERVER['HTTP_REFERER'] 并不可靠,因为用户浏览器上的特定设置可能会破坏它。但是是的,它应该包含以前的 URL,并且在未发送标头时将返回空字符串或 NULL,具体取决于服务器配置。

【讨论】:

  • 什么是 $_SERVER['HTTP_REFERER'] 的可靠替代方案?
  • @Dheeraj 没有可靠的替代方案。 $_SERVER['HTTP_REFERER'] PHP 超全局只报告底层 Referer HTTP 请求标头的值。不可靠的是 HTTP 请求标头。 引用文档不会以任何其他方式传递。
【解决方案3】:

$_SERVER 是一个全局数组变量,referrer 值是带有键 HTTP_REFERER 的数组元素。如果浏览器没有发送referrer 标头,则该元素只是从数组中丢失。可以检查数组是否有array_key_exists的元素;在这种情况下:

array_key_exists('HTTP_REFERER', $_SERVER)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 2016-07-27
    • 2012-09-27
    • 1970-01-01
    相关资源
    最近更新 更多