header()函数删除HTTP_REFERER

时间:2013-07-31 13:32:22

标签: php redirect http-headers

关于它可能有许多相关的问题和许多关于它的文章,但我无法理解它的原因。

我想要实现的是我们有一些联盟的东西。如果用户点击谷歌或其他任何地方的任何广告。他被带到我们将他重定向到approprite页面的页面。对于重定向,我们使用以下代码。

header("HTTP/1.1 301 Moved Permanently");  
header("Location: http://www.example.com/page2.php");

假设此代码写在page1.php上,用户被重定向到page2.php。在page1我从用户到达的地方获取引用(例如google.com)。但在page2.php上,我们不会将引用视为page1。这在我看来是一种奇怪的行为。任何人都可以说明这种行为的原因。

PS:我通过在重定向和重新审核page2上的值之前添加Cookie来解决此问题。

由于

2 个答案:

答案 0 :(得分:0)

如果我没有弄错,推荐者会被浏览器发送(如果允许,并非所有浏览器都这样做,并且客户端可以轻松更改),这意味着您的page1永远不会被设置为第2页的推荐者因为它是服务器进行重定向,而不是客户端。 据我所知,没有办法“伪造”它,虽然bansi提出的技术看起来很诱人,我在网上看到多个帖子表明它实际上不起作用。

答案 1 :(得分:-2)

重要:,如@cryptic和@Bartdude所述以下解决方案很有吸引力但不起作用。为什么这不起作用解释如下。

---原始解决方案---
同时添加Referer标题

header("Referer: http://www.the_referer_page");

浏览器将Referer发送到服务器。因为您要重定向到另一个站点,所以您必须手动将标头发送到另一个站点,因为不涉及浏览器。

---原始解决方案结束---

为什么上述解决方案不起作用

浏览器将HTTP referer发送到服务器。当301 Moved Permanently标头发送到浏览器时,服务器告诉浏览器该页面已移动并从新位置加载页面。然后浏览器决定请求或不从新位置请求页面以及将所有标头发送到新服务器的内容。实际上向浏览器发送HTTP referer标题实际上毫无意义。

抱歉提供了错误的解决方案。希望这可以避免某些诱惑使用Referer标题诱惑我。