试图了解 $user->data 在 phpbb3 中是如何工作的

Trying to get an understanding of how $user->data works in phpbb3

我喜欢尝试看看开源软件是如何工作的,这样我就可以尝试和学习新的方法来创建代码并增加我对某些编程语言的了解。

我一直在研究 phpbb3 代码,试图了解它如何通过各种 classes 管理会话和用户信息。

我无法追踪在任何 classes 中 $user->data 的设置位置。有人可以帮助分解他们的会话管理 class 如何与他们的用户 class 一起工作吗?

大多数访问会话和用户 classes 的文件都以此代码开头:

// Start session management
$user->session_begin();
$auth->acl($user->data);

我已经能够追踪 session_begin 函数在会话 class 中的位置,我看到会话 class 扩展了用户 class,但我有无法追踪 $user->data 的设置或返回位置。

谁有好的破解方法?

在每个页面上,首先要做的是 include($phpbb_root_path . 'common.' . $phpEx);,这意味着如果您的 php 文件扩展名包含文件 /common.php是 php.

此文件包含 /includes/compatibility_globals.php 并运行 register_compatibility_globals(); 创建全局用户对象: $user = $phpbb_container->get('user');。 class 位于 \phpbb\user.

因为用户 class 扩展了 \phpbb\session,$user 获得了 \phpbb\session 的所有属性。属性之一是 data,方法之一是 session_begin。现在您拥有开始会话所需的一切:$user->session_begin();。在那个方法 $user->data 的某个地方得到它的第一个值:

// if session id is set
if (!empty($this->session_id))
{
  $sql = 'SELECT u.*, s.*
    FROM ' . SESSIONS_TABLE . ' s, ' . USERS_TABLE . " u
    WHERE s.session_id = '" . $db->sql_escape($this->session_id) . "'
      AND u.user_id = s.session_user_id";
  $result = $db->sql_query($sql);
  //data property
  $this->data = $db->sql_fetchrow($result);
  $db->sql_freeresult($result);