您可以通过查询会话表来获取所有登录用户的列表。我假设您使用的是 Drupal 6。
<?php
$result = db_query('SELECT uid FROM {sessions} WHERE uid != 0');
$users = array();
while($user = db_fetch_array($result)) {
$users[] = user_load($user);
}
该查询排除以下会话uid = 0
因为这些是匿名用户。$users
是用户对象的数组,如中所述Drupal API 文档 http://api.drupal.org/api/global/user.
如果您已经知道将使用用户对象的哪一部分(例如,仅用户 ID 和名称),则可以通过删除 while 循环中的 user_load() 并向查询添加与 users 表的连接来优化此操作,因为每个 user_load () 进行一项附加查询。以下内容将为您提供登录用户 ID 和名称的列表:
<?php
$result = db_query('SELECT u.uid, u.name FROM {sessions} s INNER JOIN {users} u ON u.uid = s.uid WHERE s.uid != 0');
$users = array();
while($users[] = db_fetch_array($result));
由于登录用户永远不会超时(您可以无限期地保持登录状态),因此排除一段时间内未访问该网站(即可能一小时不活动)的登录用户可能很有用:
$timestamp = time - 3600; // 3600s is one hour.
$result = db_query('SELECT uid FROM {sessions} WHERE uid != 0 AND timestamp >= %d', $timestamp);
您可能还想限制返回的用户数量。例如,也许您想获取最多 10 个访问该网站的登录用户:
$limit = 10; // Limit to the last 10 users.
$result = db_query_range('SELECT uid FROM {sessions} WHERE uid != 0 ORDER BY timestamp DESC', $timestamp, 0, $limit);
顺便说一句,如果您要使用神奇的数字 http://en.wikipedia.org/wiki/Magic_number_%28programming%29(如 $limit 或 3600s),您应该使用variable_set()、variable_get() 和variable_del() 使它们持久化。