首页 > 解决方案 > Yii 1.1:读取用于识别用户的 $_COOKIE 时的竞争条件

问题描述

当 2 个用户(几乎)同时访问同一页面时,我遇到了竞争情况。这会导致用户获得对其他用户数据的访问权限。

几个月来,我一直试图抓住这个问题,并最终设法做到了。我使用的是 Yii Framework 1.1,用户登录流程如下:

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

由于我能够捕获问题,因此我可以通过刷新轻松解决它,但如果有更稳定的解决方案可用,我更愿意沿着这条路线走。

任何建议将不胜感激。

干杯

标签: phpyiisession-cookiesyii1.x

解决方案


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

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

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

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


推荐阅读