页面请求之间的会话冲突


session conflict between page requests

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

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();