hook_user op load不会开火?

时间:2010-08-03 14:53:34

标签: drupal

我在自定义模块中有以下代码,用于在登录后保存session_id以进行比较。我想将其添加到用户对象,因此我调用了hook_user,如下所示:

function mymodule_init() {
    global $user;

    if ($user->uid == 0 && !isset($_SESSION['anonymous_session_id'])) {
        $_SESSION['anonymous_session_id'] = session_id();
    }
}

function mymodule_user($op, &$edit, &$account, $category = NULL) {
    switch ($op) {
        case 'load':
            $user->anonymous_session_id = $_SESSION['anonymous_session_id'];
            break;
        default:
            break;
    }
}

但是,它不在用户对象中。有一个'session'字段有一个$ _SESSION信息的序列化数组,这意味着我可能不需要hook_user,但为什么这段代码不起作用?

1 个答案:

答案 0 :(得分:5)

您遇到两个问题:

  1. hook_user()中的用户对象不在$user中(它不是参数之一):它实际上位于$account
  2. 即使在$user期间修改$account后,全局hook_user()对象也未完全加载(请参阅related issue)。
  3. 要获取满载的用户对象,请执行以下操作:

    global $user;
    $account = user_load(array($user->uid));
    

    要记住的一件事是,除非您运行user_save(),否则在$user期间添加到hook_user($op = 'load')对象的信息不会在页面之间传输:hook_user()每次加载用户时都会调用,这至少是一次页面。如果要在不使用数据库的情况下维护会话信息,请使用$_SESSION