Как работает глобальная переменная $user?


Вот мой сценарий:

Я создаю нового пользователя и динамически создаю для него некоторый контент, владельцем которого он является.

Каждый пользователь может войти в систему, просмотреть свой контент и отредактировать свой профиль. Я использую блок, в котором у меня есть ссылки в меню на каждый контент и на его профиль.

Вывод темы функции блока использует global $user; для получения текущего зарегистрированного пользователя.

Однако странно то, что $user->uid возвращает последнего созданного пользователя в системе и не текущий зарегистрированный пользователь. Также $user->language относится к последнему созданному пользователю в системе. Почему?

Пользователь выходит из системы с помощью user/logout; это команда для выхода, верно? Нужно ли мне делать больше после выхода пользователя из системы, например, сбрасывать ГЛОБАЛЬНУЮ переменную?

 4
Author: kiamlaluno, 2011-05-09

2 answers

Я бы проверил, не кэшируется ли блок или вы не используете что-то вроде Boost (статическое кэширование).

Звучит так, как будто содержимое блока кэшируется для меня.

 5
Author: Kevin, 2011-05-09 20:05:14

global $user всегда следует ссылаться на текущего вошедшего в систему пользователя.

Существует большая вероятность того, что вы, вероятно, сбрасываете глобальную переменную $user в своем пользовательском коде. Хорошей практикой при работе с учетными записями пользователей является использование переменной $account для различия между ними, см. Пример user_save().

 3
Author: tim.plunkett, 2011-05-09 20:07:30