我正在尝试追踪我的应用程序中一个非常严重的错误的来源。我使用会话变量来跟踪从数据库调用派生的当前登录用户(通过PEAR,配置为返回关联数组)。
变量设置如下:
$_SESSION['u'] =& $db->getRow("SELECT * FROM user WHERE blah");
$u =& $_SESSION['u'];
global $u;
然后我在代码中使用$ u作为快捷方式访问此数据。
此代码已运行多年而没有问题,但最近似乎有些用户发现自己以其他人身份登录。这似乎发生在他们登录后的一段时间,他们迁移成为别人。显然这很可怕。
我试图调试但没有可重复的事件序列,这是非常困难的。
我的问题是,你认为通过引用数据库派生的数组来设置会话变量可能会导致它吗?可以在进一步的页面加载时,会话变量指向的内存位置被另一个用户来自不同会话的数据替换?或者它可以替换为我在此用户会话中运行的另一个数据库调用的数据?我从后来的阅读中理解,这段代码不应该像这样操作,并且已经删除了第一个&但我想知道这是否真的是问题所在。我已经读过内存位置可能会让GC变为空白,但这似乎没有发生,它似乎只是被其他用户详细信息损坏了
欢迎所有帮助。