Drupal:drupal_set_message没有显示消息

edd*_*147 6 drupal

当用户在我的网站上注册时,我似乎无法从drupal_set_message收到消息.我正在使用Drupal 6.14.

在user.module中添加打印:

function user_register_submit($form, &$form_state) {
  ...
      if ($notify) {
        ...
      }
      else {
        drupal_set_message(t('Your password and further instructions have been sent to your e-mail address.'));
        print 'xxxxxx';
        $form_state['redirect'] = '';
        return;
      }
    }
    ...

}
Run Code Online (Sandbox Code Playgroud)

它打印'xxxxx';

var_dump所述的$_SESSION可变给出了状态消息,该消息drupal_set_message犯规显示,使得看起来很好也.

我已经卸载了所有模块,只有核心遗留物,现在使用Garland作为主题.

此外,我已经安装了一个新的Drupal安装,在那里它给了我一个很好的状态消息.

然后我从全新安装中比较了我的.htaccess和Drupal.修改我的使它们相等.

什么都没有帮助.

有什么想法吗?

edd*_*147 11

我们刚解决了.显然,用户0丢失,有人删除它或某些模块做到了.将其插入数据库后,我们再次收到了消息.

这是你要做的:

INSERT INTO `users` (`uid`, `name`, `pass`, `mail`, `mode`, `sort`, `threshold`, `theme`, `signature`, `signature_format`, `created`, `access`, `login`, `status`, `timezone`, `language`, `picture`, `init`, `data`) VALUES
(0, '', '', '', 0, 0, 0, '', '', 0, 0, 0, 0, 0, NULL, '', '', '', NULL);
Run Code Online (Sandbox Code Playgroud)

之后将uid设置为0,因为uid是一个自动增量!!

不过还是不知道如何使用drupal_set_message.


Hor*_*Kol 10

很好地找到了原因 - 几个星期前我有同样的问题.

现在,原因如下:

Drupal会话通过ID号(您可以在数据库中的会话表中看到)在用户之间进行链接.Drupal还拥有自己的会话处理功能,其中之一是检查当前会话是否与有效用户帐户相关联 - 对于匿名用户,即用户0 - (如果多个会话则无关紧要)每个用户都是开放的 - 当这么多匿名用户访问您的网站时,肯定会发生这种情况.

如果Drupal没有为当前会话找到有效用户,则会重新重新生成会话 - 这意味着先前的信息将丢失.

编辑:

最近的一条评论促使我为答案添加了更多深度,因为我发现了最有可能导致错误的原因.

基本上,它是匿名用户使用ID 0.如果在MySQL中将0值插入自动递增字段,则该值实际上将成为序列中的下一个可用值(因此,将自动递增字段设置为10的表将INSERT为11而不是0).

我们遇到了这个问题,因为我们在开发过程中使用MySQL转储来导出和导入备份.