PHP:提交HTML表单时,HTTP_REFERER会被设置吗?

3
我的应用程序抛出了一个异常,但HTTP_REFERER为空,在这种情况下似乎很奇怪。我想知道你能否回答一个快速问题:
所以我有一个表单:
<!-- mysite.com/index.html -->

<form action="http://mysite.com/somewhere/else">
    <input type="submit" />
</form>

当有人提交表单时,我期望$_SERVER['HTTP_REFERER']会被设置为/index.html。这是正确的吗?


2
你可以使用Firebug来监控HTTP请求。非常有帮助 :) - Felix Kling
1
这个问题与PHP无关,它取决于您的客户端软件(浏览器),而不是您的服务器软件(即PHP)。 - jigfox
6个回答

1

是的。我刚刚用HTTP POST和GET测试了一下,Referer头信息都被客户端(Google Chrome)发送了。

不过这可能是浏览器特定的行为。

编辑:

如果有人在意的话,这里有一个在PHP中测试它的简单方法:

<?php
    echo $_SERVER['HTTP_REFERER'];
?>
<form method="post"><input type="submit" value="Submit"></form>
<form method="get"><input type="submit" value="Submit"></form>

1

$_SERVER['HTTP_REFERER']可选的HTTP Referer头的值。该头由浏览器设置。

浏览器可以选择不设置它或者欺骗它,例如Firefox的RefControl插件所做的那样。因此,您不能依赖它的存在,甚至准确性。

如果浏览器提供它,它很可能不是/index.html,而是http://www.mysite.com/index.html


0

我相信如果您输入URL,浏览器不会设置referrer,但如果您来自另一个页面(通过单击或表单提交),则浏览器应该设置referrer变量。PHP应该读取并解析此变量。


0

是的,当POST被发送时,但不一定是页面第一次加载时。您可以通过查看日志(“tail -n 10 file.log”将提供最近的10个条目)来验证此操作。下面是虚拟PHP表单site.com/php-form/的引荐部分(加粗显示):

192.168.1.10 - - [16/Apr/2008:16:12:36 +1200] "GET /php-form/ HTTP/1.1" 200 2014 "http://www.referringsite.com/" Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.8 (like Gecko)"


0

引荐者通常会发送,因此您可以期望它。
但是您不能依赖它,因为它仅取决于客户端的意愿-发送或不发送。
而且许多客户端不会发送。


0

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

'HTTP_REFERER' 该属性记录了用户代理访问当前页面之前所在的页面地址(如果有的话)。该属性由用户代理设置,但并非所有用户代理都会设置它,而且一些用户代理提供修改HTTP_REFERER的功能。简而言之,不能完全信任该属性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接