【问题标题】:session conflict between page requests页面请求之间的会话冲突
【发布时间】: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,则域很重要。

标签: php session


【解决方案1】:

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

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

echo session_id();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-15
    • 2012-11-28
    • 2011-03-01
    • 2011-05-07
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    相关资源
    最近更新 更多