$_SERVER['HTTP_REFERER']
Posted
技术标签:
【中文标题】$_SERVER[\'HTTP_REFERER\']【英文标题】:$_SERVER['HTTP_REFERER']$_SERVER['HTTP_REFERER'] 【发布时间】:2012-09-27 17:42:49 【问题描述】:我正在我的网站上创建一个报告问题链接,我希望它通过电子邮件将他们在单击报告链接之前的最后一个地址发送给我。我知道/认为您使用 $_SERVER['HTTP_REFERER'] 但我不知道如何将其放入邮件代码中?那么您将如何在没有它的情况下写下我的邮件代码。
Mail("email@email.com", "Subject", "Message");
echo "Report Sent";
【问题讨论】:
推荐人不可靠。许多浏览器出于隐私原因不包含它,而其他浏览器则包括伪造/伪造的。 @MarcB 你知道我将如何获得一些可以工作的链接吗? 您无能为力...您仍然可以使用它,但在某些情况下您将一无所有。 将页面地址嵌入到您传递给问题报告者的 url 中,例如。http://example.com/problem.php?url=http://example.com/page_you_are_on.php
@MarcB 我会在哪里嵌入它来做到这一点?
【参考方案1】:
消息应该是一个可以放入信息的变量:
$message = "Error report: <p>Last site visited: $_SERVER['HTTP_REFERER']</p>....";
mail("email@email.com", "Subject", $message);
请注意,HTTP_REFERER
位位于字符串的 内。那是强制它推断值(我不喜欢字符串连接)。
还请注意,如上所述,不能保证 REFERER 将具有正确的值,或者根本没有任何值。
【讨论】:
如何在不使用引用样式的情况下报告此问题? 您可以使用 javascript 将值异步发送到 PHP。 JS 在document.URL
中有当前位置/url 值
您想要他们点击报告按钮时所在的当前网址的地址,还是之前的网址?如果他们从 Google 中找到了一个页面,您会想要捕获它吗?
我想要做的是,如果有人在我的网站上发现错误,我希望他们点击链接报告问题,然后它会将最后一个地址发送给我他们点击该链接时所在的网站的一部分。
匿名代理通常可以选择删除推荐人。【参考方案2】:
除了关于可以嗅探的 http 引用、匿名代理等的所有内容之外,依赖 HTTP_REFERER 并不是一个好的编程标准。
相反,如果您有,例如:
http://www.example.com/application/client.php
用户可以点击的地方
http://www.example.com/application/report_problem.php
只需将“...client.php”字符串传递给您将创建的“...report_problem.php”报告问题处理程序。
将“originating”页面链接传递给“report_problem”很容易,可以这样做:
<?php
// pages where you will append the "problem link"
// $this_page holds an "url encoded" version of the request uri ( e.g. /application/client.php )
$this_page = rawurlencode ( $_SERVER["REQUEST_URI"] );
?>
<a href="report_problem.php?originating_page=<?=$this_page;?>">Report problem</a>
然后,在“report_problem.php”代码中:
<?php
// report_problem.php
$originating_page = ( array_key_exists ( 'originating_page', $_GET ) && ! empty ( $_GET['originating_page'] ) ? rawurldecode ( $_GET['originating_page'] ) : null;
if ( ! empty ( $originating_page ) )
$message = 'Error report: <p>Last site visited: ' . $originating_page . '</p>....';
mail("email@email.com", "Subject", $message);
else mail("email@email.com", "Subject", "Problem from unkown page");
?>
【讨论】:
以上是关于$_SERVER['HTTP_REFERER']的主要内容,如果未能解决你的问题,请参考以下文章
为啥是我的标头(“位置:$_SERVER['HTTP_REFERER']”); PHP函数不起作用?
PHP $_SERVER['HTTP_REFERER'] 获取前一页面的 URL 地址
是否可以在标头中添加错误处理程序(“位置:”.$_SERVER[“HTTP_REFERER”]);在php中