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

时间:2018-08-08 16:59:04

标签: php phpbb phpbb3

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

我一直在研究phpbb3代码,以尝试查看它如何通过其各种类管理会话和用户信息。

在所有类中,我都无法跟踪$ user-> data的设置位置。有人可以帮助细分其会话管理类与用户类一起工作的方式吗?

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

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

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

有人崩溃吗?

1 个答案:

答案 0 :(得分:3)

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

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

由于用户类扩展了\ 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);