用于识别用户时读取$ _COOKIE时的种族条件

问题描述 投票:1回答:1

当2个用户(几乎)同时访问同一页面时,我遇到了竞争情况。这使用户可以访问其他用户的数据。

我几个月来一直试图抓住这个问题,终于设法做到了。我正在使用Yii Framework 1.1,并且用户登录过程如下:

  • 会话存储在数据库中,我实际上并不使用$ _SESSION来存储任何内容。
  • 生成的会话ID存储在cookie中,并填充$ _COOKIE,PHP使用该$ _COOKIE将用户连接到他们的数据。
  • 从登录页面,我将cookie中的会话ID存储在表单的字段中。
  • 用户登录,验证输入,创建会话数据并与用户记录一起存储,包括表格中的会话ID(真实的会话ID)。然后,通过另外2个控制器(LoginCheck,仪表板)将用户路由到仪表板上。
  • 在会话期间,用户将频繁返回仪表板。
  • [当2个或更多用户同时(通过登录或从站点内的页面返回)同时访问仪表板页面时,两个用户最终都将具有相同的cookie ID和会话数据。我可以通过使用$ _COOKIE变量中存储的cookie值检查基于浏览器的cookie来确认这一点。用错误的数据简单刷新页面上的仪表板会导致加载正确的数据。

我已经用PHP研究了会话的竞争条件,其中一些提供了$ _COOKIE来解决会话的竞争条件,因此并没有真正为我的问题提供任何解决方案。

由于我能够捕获该问题,因此可以轻松地通过刷新来解决它,但是如果有更稳定的解决方案,我希望顺其自然。

任何建议将不胜感激。

欢呼声

php yii session-cookies
1个回答
0
投票

您可以使用带有x或x +标志的fopen来共享文件。只有一个实例可以同时打开文件。

但是您所描述的内容不一致且奇怪:您在使用所描述的会话时无需处理种族条件。我想问题是您在每次页面加载时都会重新生成会话ID,因此您可能在做不应该做的事情。

在会话上,每个用户代理必须仅生成一次会话ID,但是正如您所描述的那样,该ID在每次页面更改时都会重新生成,并且作为次要问题,它以较低的熵生成。

如果您解决了第一个问题,那么低熵问题将得到缓解,但并没有解决。

© www.soinside.com 2019 - 2024. All rights reserved.