Как я могу программно выйти из системы другого пользователя в D7?

8

На нашем сайте есть клиентские учетные записи, каждая из которых имеет супер-администратора и дополнительных пользователей, принадлежащих этой учетной записи.

Мы хотим, чтобы супер-администратор мог заставить подчиненных пользователей выйти из системы. Какой лучший способ уничтожить сеанс пользователя в Drupal, который работает независимо от того, хранится ли информация о сеансе в Redis, Memcache или в базе данных?

Прежде чем кто-то почувствует искушение предложить user_logout (), он разрушает сеанс текущего пользователя. Я хочу, чтобы текущий пользователь мог уничтожить сеанс другого пользователя!

BrianV
источник
Почти наверняка у нас уже есть вопрос по этому поводу. Я знаю, что у меня есть патч в drush-extras, чтобы сделать это, но он не был зафиксирован.
mpdonadio
Я гуглил вокруг и искал вокруг DA, но не повезло. Я рассмотрю ваш патч. РЕДАКТИРОВАТЬ: ваш патч, к сожалению, обрабатывает только случай базы данных. Мы надеялись использовать memcache, учитывая большое количество пользователей / сессий!
BrianV
1
Я считаю, что блокировка / разблокировка пользователя имеет тот же эффект (за исключением того, что они, вероятно, получат уведомление по электронной почте о разблокировке). Вы могли бы, вероятно, использовать, hook_mail_alter()чтобы перехватить эту электронную почту и подавить ее.
tyler.frankenstein

Ответы:

6

drupal_session_destroy_uid() звучит как безопасная ставка:

Завершает сеанс (и) конкретного пользователя.

Базовая реализация очищает базу данных, как и следовало ожидать, но любой модуль, который переопределяет session.inc и не обеспечивает рабочую реализацию этой функции, наверняка будет считаться поврежденным (как user_delete_multiple()и другие функции, которые в этом нуждаются).

Таким образом, в теории вы должны иметь возможность использовать эту функцию независимо от хранилища.

Клайв
источник
проголосуй, это хорошее решение
Юсефери
Это правильное решение! Для будущих читателей это реализовано в memcache. См. Cgit.drupalcode.org/memcache/tree/unstable/…
BrianV
1

Session Proxy предоставляет общую замену для обработки сессий Drupal, которая должна работать с различными бэкэндами.
Как таковой он также реализует drupal_session_destroy_uid().

Обратите внимание, что реализация сеанса Memcache API и Integration считается нестабильной , и что сопровождающий Redis рекомендует использовать Session Proxy .

Проблемы последовательной обработки сеансов в разных бэкэндах описаны в выпуске 1260634 .

Фабиан Иванд
источник
0

В Drupal 7 мы можем выйти из системы, если у нас есть его User_ID, используя db_delete ():

db_delete('sessions')->condition('uid', $User_ID)->execute();
houmem
источник