Cakephp / php用户会话交换我们客户的一部分

时间:2011-07-22 14:23:49

标签: php session cakephp cookies routing

有一个我们无法复制的错误,它涉及我们企业客户交换的特定区域中的用户。例如,用户在登录页面上以自己的身份登录,当到达家中时,他们是另一个用户。

这似乎是意外会话劫持,这里有线索:

  • cakephp security设置为low(这只表示cookie没有 重写每个页面加载,并且cookie不会执行用户代理 检查)
  • 我们的Cookie设置为不关心子域名(.example.com而不是example.com)
  • 企业用户如果登录到错误的区域,则使用302进行重定向(我们应该使用303吗?)
  • 有一个301意外发出,但用户可以复制
  • 所有受影响的用户都在一台路由器后面,通过Sprint MPLS共享互联网
  • 所有受影响的用户可能正在使用客户发布的计算机
  • 他们的IT声称没有代理缓存,也没有远程VPN访问,但他们声称能够从家用计算机和网络复制问题。

由于我们无法以任何方式复制该问题,因此我们只能假设该问题特定于其网络。

我们如何证明他们的网络/计算机导致会话交换?或者,当没有其他用户遇到此问题时,我们的最终配置是什么?

[编辑/更新]

响应评论提供的某些方向 - 我们的流量不足以发送重复的ID。 (统计上的概率太低,无法看到我们看到客户复制的内容)。

另见:

更新

我们使用FCGI,显然需要mod_php才能理解x_forwarded_for

2 个答案:

答案 0 :(得分:1)

这可能是注销中会话失效不当的问题。请确保会话中的所有变量都正确终止或显式为null终止会话中的每个对象,然后使会话无效。

第二个原因可能是在代码中使用变量检查静态变量。不正确使用静态变量也可能导致这种间歇性问题。

使用记录器记录映射到用户ID的会话ID,这可以缩小您的问题范围并帮助您了解究竟发生了什么。

在登录操作中使现有会话无效并创建新会话并将内容复制到新会话将有很大帮助。

答案 1 :(得分:0)

首先,不要假设客户有过错。这可能是他们自己或你自己的问题。在测试之前不要做出假设。

无论是谁的错,都有责任修复或帮助修复它。

首先,让一个用户成为另一个用户通常是会话ID问题的结果。您在Cake中设置的安全级别不会为每个请求重新生成会话ID。

我首先将$session->id()作为用户登录到本地网络内外。然后比较以查看会话ID是否相同或永远是空字符串。一个解决方法是为每个用户生成一个唯一的ID。

如果会话ID对于每个实例都是唯一的,您可能希望在加载下对其进行测试。

重点是先测试,然后根据调查结果而不是猜测得出结论。