代码之家  ›  专栏  ›  技术社区  ›  Narcissus

PHP用户会话变得“混乱”

  •  2
  • Narcissus  · 技术社区  · 15 年前

    我的一个客户遇到了一个问题,用户登录后,他们不时会看到一个不同用户的页面(这很容易确定,因为每个页面的顶部都有用户名)。如果他们点击“主页”链接,显然一切又恢复正常了。

    现在就我的PHP知识而言,要把这类东西混在一起需要一些努力,对吗?我不能在我们的任何开发环境中复制这个问题,就我而言,就像我说的,要真正“共享”这种会话信息需要一些努力。。。

    所以我的问题是:可能的问题是什么?以前我每次遇到这种情况都是由于代理服务器的“错误行为”,尽管他们告诉我他们没有代理请求。

    还有什么我可能遗漏的吗?还有其他可能的原因吗(当然,这可能包括我的代码有问题)?

    谢谢

    4 回复  |  直到 15 年前
        1
  •  2
  •   ylebre    15 年前

    听上去,即使您的客户机向您保证它不是,但在我看来,它仍然像是一个代理或缓存问题。如果可能的话,您可以在用户字段附近的某个位置生成页面时添加时间戳之类的内容,以确保请求是最新的。

    这样,如果页面出错,您就可以知道该页面是否是较早生成的,是否是由途中的某个对象存储的。如果您的ajax结果由浏览器缓存,并且您的客户端在同一个webbrowser上有多个人,那么就不需要代理来获得奇怪的结果。

    解决此问题的另一种方法是记录客户机的请求,并检查是否遗漏了任何内容。如果回放请求,会得到相同的结果吗?

        2
  •  2
  •   Narcissus    15 年前

    所以结果是 至少情况是相当奇怪的。

    一旦设备上的时钟设置正确,问题就消失了。

    感谢大家的建议:我讨厌调试这些缓存类型的问题。不过,我想我真的应该添加一些头来尝试阻止这些手持设备缓存数据。

        3
  •  1
  •   Powerlord    15 年前

    认为 类似这样的方法会奏效:

    session_start();
    
    if (isset($_SESSION['ip'])) {
        if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
            session_regenerate_id();
            session_destroy();
            session_start();
            $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
        }
    } else {
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
    }
    
        4
  •  0
  •   Ólafur Waage    15 年前

    您是否向用户提供了包含会话id的链接(或将会话id作为参数的其他请求)?