看看这个简单的例子,因为经过数小时的尝试,我无法使它发挥作用。
if(!isset($_SESSION['alien'])){
if(!isset($_SERVER['HTTP_REFERER']) &&
$_SERVER['HTTP_REFERER'] != 'http://www.alien-planet.com/'){
echo 'Go AWAY';
}else{
$_SESSION['alien'] = 'Yes';
}
}
目的是,如果有人来自alien-planet.com,永远不要显示Go AWAY
消息。那是他/她登陆索引页面的时候。但是,如果该人来自该网站,会话$_SESSION['alien'] = 'Yes';
将被初始化,因此即使该人刷新页面或浏览网站链接,他/她也不会看到消息
问题当你第一次访问该页面时,你没有看到Go AWAY
消息(这意味着它有效,因为我来自外星星球.com),但当我访问其他页面时,仍然是所有页面都包含session_start()
的同一网站,我不知怎的松了消息,当我再次返回索引页面时,我看到了Go AWAY
消息。
我不明白是什么原因造成的。页面中没有会话销毁/取消设置。
似乎不是所有请求的会话都相同。也许你没有告诉php用户会话是什么。有不同的方法,例如请求参数PHPSSID或会话cookie。
请确保使用其中一种方法。您可以简单地通过打印每个请求的当前会话id来测试它:
echo session_id();