You are here

1 对象$user

admin 的头像
Submitted by admin on 星期三, 2015-06-24 09:55

作者:老葛,北京亚艾元软件有限责任公司,http://www.yaiyuan.com

登录用户,必须启用cookie;匿名用户则不需要cookie。一个关闭了cookie的用户,仍然可以以匿名的身份与Drupal进行交互。

   在引导指令流程的会话阶段,Drupal创建了一个全局$user对象,用来作为当前用户的标识。如果用户没有登录(这样就没有建立一个会话cookie),那么它将被当作匿名用户对待。创建匿名用户的代码如下所示(位于bootstrap.inc):

 

function drupal_anonymous_user() {

  $user = new stdClass();

  $user->uid = 0;

  $user->hostname = ip_address();

  $user->roles = array();

  $user->roles[DRUPAL_ANONYMOUS_RID] = 'anonymous user';

  $user->cache = 0;

  return $user;

}

另一方面,如果用户当前登录了,那么可以通过使用用户的ID,通过关联表users和sessions,来创建对象$user。两个表中的所有字段都放到了对象$user中。

 

注意:用户的ID是在用户注册时或者管理员创建用户时所分配的一个序列数。这个ID是users表中的主键。

 

我们可以向主题中的page.tpl.php添加以下代码:

<?php debug($user); ?>

    这样我们就可以很容易的查看$user对象的内部结构了。下面是用户1的$user对象的一个实例结构:

stdClass::__set_state(array(

   'uid' => '1',

   'name' => 'admin',

   'pass' => '$S$Cv6KBmupqlDMHO/yQ4GadB.JGaRlASPQ3rtJ1SS0f.GiSvJO5BRM',

   'mail' => 'g089h515r806@gmail.com',

   'theme' => '',

   'signature' => '',

   'signature_format' => NULL,

   'created' => '1297216111',

   'access' => '1310787362',

   'login' => '1308985143',

   'status' => '1',

   'timezone' => NULL,

   'language' => '',

   'picture' => '0',

   'init' => 'g089h515r806@gmail.com',

   'data' => false,

   'sid' => 'Bjfjz8wSsOkQ1d7BeYfhzmerrpVfR2VM3MRjQuuciKU',

   'ssid' => '',

   'hostname' => '127.0.0.1',

   'timestamp' => '1310787484',

   'cache' => '0',

   'session' => 'batches|a:1:{i:2;b:1;}updates_remaining|a:0:{}',

   'roles' => 

  array (

    2 => 'authenticated user',

    3 => 'administrator',

  ),

))

    在上面显示的$user对象中,斜体字段意味着数据来自于sessions表。表6-1解释了$user对象的组成部分:

 

表6-1 $user的组成部分

组成                     描述

来自于表users

uid               用户ID。它是表users的主键,在Drupal系统中是唯一的。

name              用户的用户名,在用户登录时使用。

pass              用户的SHA哈希密码,在用户登录时进行对比。由于没有保存用户的原始明文密码,所以密码只能被重置,不能被恢复。

mail              用户当前的email地址。

theme             用户的默认主题。

signature         用户在他/她的账号页面所输入的签名。只有当评论模块(comment module)启用时,当用户添加一个评论时,才会看到签名。

signature_format  签名的文本格式。

created           用户账号创建时的Unix时间戳。

access            用户最近一次访问的Unix时间戳。

login             用户最近一次成功登录的Unix时间戳。

status            1表示正常激活的用户,0表示被拒绝访问的用户。

timezone          用户时区与GMT之间的差异,以秒为单位。

language          用户的默认语言。只有在站点上启用了多语言,并且用户通过编辑账号选择了一个优先语言时,才不为空。

picture           用户头像图片的文件ID。

init              用户注册时提供的初始email地址。

data              这个字段在Drupal7中,不建议使用。请使用Field API来保存需要存储的数据。

来自于表user_roles

roles             分配给当前用户的角色。

来自于表session

sid               通过PHP分配给当前用户会话的会话ID。

Ssid              安全会话ID。

hostname          用户浏览当前页面时所使用的IP地址。

timestamp         一个Unix时间戳,表示用户的浏览器最近接收一个完整页面的时间。

cache             一个用于per-user caching(参看 includes/cache.inc)的时间戳

session           $_SESSION的序列化内容。在用户会话期间,模块可以向这里存储任意数据。


Drupal版本: