【问题标题】:PHP User Sessions Getting 'Muddled'PHP 用户会话变得“混乱”
【发布时间】:2009-06-16 08:42:10
【问题描述】:

我遇到问题的应用程序是一个通用的 Web 应用程序……它处理用户的方式没有什么特别之处。也就是说,我在 session 变量中处理用户信息,通过 cookie 管理 session。

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

现在就我的 PHP 知识而言,将这种东西混合起来需要一些努力,对吧?我无法在我们的任何开发环境中复制该问题,就我而言,就像我说的那样,实际上“共享”这种会话信息需要付出一些努力......

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

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

谢谢...

【问题讨论】:

    标签: php session


    【解决方案1】:

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

    这样,如果页面出现问题,您可以知道该页面是否是较早生成的,并且在途中被某些东西存储了。如果您的 ajax 结果被浏览器缓存,并且您的客户端在同一个网络浏览器上有多个人,则不需要代理即可获得古怪的结果。

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

    您能否验证当您以用户 A 身份登录并“放错”您的会话 cookie(删除它)时,您仍然可以获得您想要的信息吗?如果是这样,则处理身份验证的方式可能有问题。

    希望这会有所帮助!

    【讨论】:

    • 我喜欢在页面表单上添加时间戳的想法,仅用于“信息”目的。我认为这肯定会有所帮助。
    【解决方案2】:

    所以事实证明,这种情况的最终结果至少是相当古怪的。

    事实证明,客户使用掌上电脑访问应用程序并让电池没电了。然后,当电池最终重新充电时,该特定设备将其时钟重置为 2005 年,似乎这会导致浏览器从其缓存中读取某些页面。

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

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

    【讨论】:

      【解决方案3】:

      您可能需要考虑进行某种会话验证,例如将 IP 地址存储在会话中,如果会话中的地址与当前用户的 IP 不匹配,则将其销毁。

      当然,如果 IP 不匹配,您可以只为用户强制一个新会话,而不是销毁它。我认为这样的事情会起作用:

      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】:

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

        【讨论】:

        • 不是故意的,不是。我猜如果浏览器没有接收到 cookie,那么它会默认为那个。您认为在请求中包含会话 ID 会使事情变得更好还是更糟?
        • 更糟糕的是,因为这样链接可以在用户之间使用他们的 session_id 共享,然后他们会登录到他们的帐户。这就是我认为正在发生的事情。它可能会在您(或用户)不知情的情况下进行,一些 ajax 查询要求提供会话 ID 或另类的东西。
        猜你喜欢
        • 2013-07-01
        • 2015-04-15
        • 1970-01-01
        • 1970-01-01
        • 2014-06-24
        • 2015-10-06
        • 2011-03-10
        • 1970-01-01
        • 2012-04-19
        相关资源
        最近更新 更多