PHP:提交HTML表单时,是否设置了HTTP_REFERER?

时间:2010-06-22 20:35:56

标签: html http

我的应用程序中抛出异常,但HTTP_REFERER为null,在这种情况下看起来很奇怪。我想知道你是否能回答一个简单的问题:

所以我有这样的形式:

<!-- mysite.com/index.html -->

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

当有人提交表单时,我预计$_SERVER['HTTP_REFERER']将设置为/index.html。这是真的吗?

6 个答案:

答案 0 :(得分:1)

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

浏览器可以选择不设置它或撒谎,例如Firefox的RefControl插件。因此,不能依赖它存在,甚至是准确的。

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

答案 1 :(得分:0)

是。我刚用HTTP POST和GET测试它,并且客户端(谷歌浏览器)都发送了Referer标题。

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

编辑:

如果有人关心,这是一种在PHP中测试它的简单方法:

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

答案 2 :(得分:0)

我相信如果您输入网址,浏览器将不会设置引荐来源,但如果您来自其他网页(点击或表单帖子),浏览器应设置引荐来源变量。这个变量应该由PHP读取和解析。

答案 3 :(得分: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(兼容; Konqueror / 3.5; Linux)KHTML / 3.5.8(如Gecko)“

答案 4 :(得分:0)

推荐人通常已发送,因此,您可以期待它 但你不能依赖,因为它只是在客户的意愿上 - 发送或不发送。
许多客户没有。

答案 5 :(得分:0)

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

'HTTP_REFERER'
The address of the page (if any) which referred the user agent to the current page. This is set by the user agent. Not all user agents will set this, and some provide the ability to modify HTTP_REFERER as a feature. In short, it cannot really be trusted.