gpt4 book ai didi

drupal - hook_user op 加载不触发?

转载 作者:行者123 更新时间:2023-12-01 11:59:05 25 4
gpt4 key购买 nike

我在自定义模块中有如下代码保存一个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. hook_user() 中的用户对象不在 $user 中(它不是参数之一):它实际上在 $account.
  2. 即使在 hook_user() 期间修改了 $account 之后,全局 $user 对象也没有完全加载(参见 related issue )。

要获取完全加载的用户对象,请执行以下操作:

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

要记住的一件事是,除非您运行 user_save(),否则在 hook_user($op = ' load') 不会从一个页面转移到另一个页面:hook_user() 会在每次加载用户时被调用,这至少是一个页面一次。如果您想在不使用数据库的情况下维护 session 信息,请使用 $_SESSION

关于drupal - hook_user op 加载不触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3397735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com