所以我有一个表单:
<!-- mysite.com/index.html -->
<form action="http://mysite.com/somewhere/else">
<input type="submit" />
</form>
当有人提交表单时,我期望$_SERVER['HTTP_REFERER']
会被设置为/index.html
。这是正确的吗?
<!-- mysite.com/index.html -->
<form action="http://mysite.com/somewhere/else">
<input type="submit" />
</form>
当有人提交表单时,我期望$_SERVER['HTTP_REFERER']
会被设置为/index.html
。这是正确的吗?
是的。我刚刚用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>
$_SERVER['HTTP_REFERER']
是可选的HTTP Referer头的值。该头由浏览器设置。
浏览器可以选择不设置它或者欺骗它,例如Firefox的RefControl插件所做的那样。因此,您不能依赖它的存在,甚至准确性。
如果浏览器提供它,它很可能不是/index.html
,而是http://www.mysite.com/index.html
我相信如果您输入URL,浏览器不会设置referrer,但如果您来自另一个页面(通过单击或表单提交),则浏览器应该设置referrer变量。PHP应该读取并解析此变量。
是的,当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)"
引荐者通常会发送,因此您可以期望它。
但是您不能依赖它,因为它仅取决于客户端的意愿-发送或不发送。
而且许多客户端不会发送。