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


8

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

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

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


Почти наверняка у нас уже есть вопрос по этому поводу. Я знаю, что у меня есть патч в 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();
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.