我使用if语句和PHP的$ _SERVER [' HTTP_REFERER']检查用户是否来自主页并执行某些功能,如果他们这样做:
if($_SERVER['HTTP_REFERER'] == htttp://www.example.com {
//some code
}
问题是主页有时会在URL中传递GET变量,PHP的$ _SERVER [' HTTP_REFERER']方法将带有GET变量的URL视为不同的URL,因此除非用户来自主页而不传递GET变量,否则不会触发if函数。
我想在有人来自主页时触发if语句,无论是否传递了GET变量,都会非常感谢任何帮助!
答案 0 :(得分:5)
最简单的方法是检查HTTP_REFERER
是否以所需的网址开头:
if (strpos($_SERVER['HTTP_REFERER'], 'http://www.example.com') === 0)) {
答案 1 :(得分:2)
但是,这只会检查域名。这是有利的,因为一些站点允许省略(www。),而其他站点甚至可以通过(https://)和(http://)到达。
if (strpos($_SERVER['HTTP_REFERER'], 'example.com')) {/*If refer contains example.com*/}
顺便说一句,请注意,引用很容易被欺骗。
答案 2 :(得分:1)
您也可以尝试使用此
$url = $_SERVER['HTTP_REFERER'];
$data = parse_url($url);
$referer= $data['host'];
if($referer== 'www.example.com') {
// Some codes here
}
/*
var_dump($data);
Array
(
[scheme] => http
[host] => www.example.com
[path] => /path/to/
[query] => here=there
)
*/
有了这个,您甚至可以提取引用的路径和查询字符串。
注意:如果您的方案可能是http
的{{1}},那么最好只提取https
的主机名进行匹配。