【发布时间】:2013-12-10 11:17:08
【问题描述】:
看看这个简单的例子,因为经过几个小时的尝试,我无法让它工作。
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 消息(这意味着它有效,因为我来自 alien-planet.com)但是,当我去的时候到其他页面,仍然在所有页面中包含 session_start() 的同一站点,我以某种方式丢失了消息,当我再次返回索引页面时,我看到了 Go AWAY 消息。
我不明白是什么原因造成的。页面中没有会话销毁/取消设置。
【问题讨论】:
-
你确定第二个 if 正在做你想做的事吗?您正在查看是否没有设置 HTTP_REFERER,但您还必须将相同的 HTTP_REFERER 设置为某些东西,以获得“离开”消息。那里有些奇怪。
-
尝试像这样检查并告知。
if(!isset($_SERVER['HTTP_REFERER']) && !strpos($_SERVER['HTTP_REFERER'],'alien-planet.com')){ -
@ShankarDamodaran 我已经完成了 var_dump($_SERVER['HTTP_REFERER']) 并显示了准确的结果
-
我可以看到 2 个可能的原因(我敢肯定还有更多); 1)你没有在第一页开始会话,所以会话数据永远不会第一次保存。 2)当链接到内部页面时,您正在从 - 例如 - www.example.com 移动到 example.com。如果域发生变化,cookie 可能会“消失”(即会话丢失)
-
@THOR 会话可能存储在服务器上 - 但如果您使用 cookie 保存会话 ID,则域很重要。