На нашем сайте есть клиентские учетные записи, каждая из которых имеет супер-администратора и дополнительных пользователей, принадлежащих этой учетной записи.
Мы хотим, чтобы супер-администратор мог заставить подчиненных пользователей выйти из системы. Какой лучший способ уничтожить сеанс пользователя в Drupal, который работает независимо от того, хранится ли информация о сеансе в Redis, Memcache или в базе данных?
Прежде чем кто-то почувствует искушение предложить user_logout (), он разрушает сеанс текущего пользователя. Я хочу, чтобы текущий пользователь мог уничтожить сеанс другого пользователя!
hook_mail_alter()
чтобы перехватить эту электронную почту и подавить ее.Ответы:
drupal_session_destroy_uid()
звучит как безопасная ставка:Базовая реализация очищает базу данных, как и следовало ожидать, но любой модуль, который переопределяет session.inc и не обеспечивает рабочую реализацию этой функции, наверняка будет считаться поврежденным (как
user_delete_multiple()
и другие функции, которые в этом нуждаются).Таким образом, в теории вы должны иметь возможность использовать эту функцию независимо от хранилища.
источник
Session Proxy предоставляет общую замену для обработки сессий Drupal, которая должна работать с различными бэкэндами.
Как таковой он также реализует
drupal_session_destroy_uid()
.Обратите внимание, что реализация сеанса Memcache API и Integration считается нестабильной , и что сопровождающий Redis рекомендует использовать Session Proxy .
Проблемы последовательной обработки сеансов в разных бэкэндах описаны в выпуске 1260634 .
источник
В Drupal 7 мы можем выйти из системы, если у нас есть его User_ID, используя db_delete ():
источник