页面请求之间的会话冲突

时间:2013-11-25 16:24:37

标签: php session

看看这个简单的例子,因为经过几个小时的尝试,我无法让它发挥作用。

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消息。

我不明白造成这种情况的原因。页面中没有会话销毁/未设置。

1 个答案:

答案 0 :(得分:1)

似乎所有请求的会话都不一样。也许你不告诉php用户会话是什么。有不同的方法,例如请求参数PHPSESSIDsession cookies

请确保您使用其中一种方法。您可以通过打印每个请求的当前会话ID来简单地测试它:

echo session_id();