如何确定调用PHP头的URL

时间:2012-07-14 07:44:03

标签: php http-headers

我在http://www.example.com/abc/def/a/下面有一个用户可以购买产品的页面。 对于营销活动(印刷纸),客户应输入较短的网址 http://www.example.com/order/

当调用此URL时,服务器将执行此脚本:

<?php
header("Location: http://www.example.de/abc/def/a/");
exit;
?> 

http://www.example.com/abc/def/a/下的页面包含一些内容 信息(回扣代码等),只应对用户可见 来自http://www.example.com/order/

$_SERVER['HTTP_REFERER']似乎与我所读过的内容不太可靠。

我检查了phpinfo();是否有任何包含&#34; order&#34;的信息变量但我还没找到。

是否可以或者您是否建议采用其他方法?

2 个答案:

答案 0 :(得分:1)

HTTP是纯粹的无状态协议形式,因此您无法在协议本身找到任何可以帮助您解决当前问题的内容。

使用$_SESSION在请求之间存储数据是最简单的步行路径,也是我的建议。

如上所述;由于用于传输信息的协议是无状态,你别无选择,只能为你的web应用程序创建一个方法,以识别哪个用户完成了哪个请求。这是一个完美的问题,解决了php-会话。


答案 1 :(得分:1)

正如您所发现的,HTTP Referer以及所有其他标头很容易被伪造。我看到实现此目的的唯一可靠方法是在用户访问订单页面时记录用户,当他们访问/abc/def/a/页面时,验证日志条目是否存在。这种日志可以存储在$_SESSION中,但请确保在使用多个服务器时,您需要进行适当的设置以确保所有服务器共享相同的会话信息(您可以使用redis server to store session data)。

在订单页面上:

session_start();
$_SESSION['order_visited'] = true;

在折扣代码页上:

session_start();
if(!isset($_SESSION['order_visited']) || !$_SESSION['order_visited']) {
    header('Location: /order'); // Must visit order first
    die();
}