【问题标题】:php/html - http_refererphp/html - http_referer
【发布时间】:2010-10-11 00:21:17
【问题描述】:

我正在创建一个网站,并且在一个特定页面上,我想将用户送回上一页。我对 PHP/HTML 还很陌生,并且一直在使用一些现有的代码来获得想法和帮助。

现有代码使用如下方法:

if (! empty($HTTP_REFERER)) 
{
    header("Location: $HTTP_REFERER");
} else 
{
    header("Location: $CFG->wwwroot");
}

但是,当我使用此代码时,HTTP_referer 始终被视为空,并且用户被重定向到根页面。这段代码有什么明显的缺陷吗?

【问题讨论】:

    标签: php html http-referer


    【解决方案1】:

    不要依赖 HTTP Referrer 是一个有效的甚至是非空的字段。人们可以选择不使用该集合,将对该变量的任何检查留到 IF-ELSE 子句的空白处。

    您可以通过在 URL 或 POST 参数中发送一个参数来防止这种情况发生,该参数将包含一个值,您可以使用该值将用户重定向回。

    【讨论】:

    • +1。推荐人本质上是不可靠的。使用参数将用户引导到您希望他们在表单后去的地方。
    【解决方案2】:

    你需要使用:

    $_SERVER['HTTP_REFERER']
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        如果您想将该人送回上一页并使其正常工作而不管引荐来源是否正确设置,您可以将 GET 参数附加到 URL(或 POST)。您需要对 URL 进行编码。 . 像

        http://www.domain.com.au/script.php?return=http%3a%2f%2fwww.domain.com.au%2fthis-is-where-i-was%2f

        你可以使用PHP的urlencode()函数。

        【讨论】:

          【解决方案5】:

          还要注意,referer 标头可能为空或丢失,因此您根本不应该依赖它..

          【讨论】:

            【解决方案6】:

            你应该使用

            $_SERVER['HTTP_REFERER']
            

            不过看php.ini中的register_globals配置,出于安全考虑应该是关闭的。您可以在PHP Manual site 上阅读更多内容。

            【讨论】:

              猜你喜欢
              • 2014-05-17
              • 2015-09-06
              • 2011-05-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-12-27
              • 2012-09-27
              相关资源
              最近更新 更多