¿Cómo puedo desconectar programáticamente a otro usuario en D7?

8

En nuestro sitio tenemos cuentas de clientes, cada una con un super administrador y sub usuarios que pertenecen a esa cuenta.

Queremos que el súper administrador pueda obligar a los usuarios secundarios a cerrar sesión. ¿Cuál es la mejor manera de destruir la sesión de un usuario en Drupal que funciona independientemente de si la información de la sesión se almacena en Redis, Memcache o la base de datos?

Antes de que alguien se sienta tentado a sugerir user_logout (), eso destruye la sesión del usuario actual . ¡Quiero que el usuario actual pueda destruir la sesión de un usuario diferente !

BrianV
fuente
Casi seguro de que ya tenemos una pregunta sobre esto. Sé que tengo un parche en drush-extras para poder hacer esto, pero no se ha comprometido.
mpdonadio
Busqué en Google y busqué en DA, pero no tuve suerte. Revisaré tu parche. EDITAR: Su parche lamentablemente solo maneja el caso de la base de datos. ¡Esperamos usar memcache dada la gran cantidad de usuarios / sesiones!
BrianV
1
Creo que bloquear / desbloquear al usuario tiene el mismo efecto (excepto que probablemente recibirán una notificación por correo electrónico del desbloqueo). Probablemente podría usar hook_mail_alter()para interceptar ese correo electrónico y suprimirlo.
tyler.frankenstein

Respuestas:

6

drupal_session_destroy_uid() suena como una apuesta segura:

Finaliza las sesiones de un usuario específico.

La implementación principal borra la base de datos, como era de esperar, pero cualquier módulo que anule session.inc y no proporcione una implementación funcional de esa función, seguramente se considerará roto (ya que user_delete_multiple()otras funciones lo necesitan).

Entonces, en teoría, debería poder usar esa función independientemente del almacenamiento.

Clive
fuente
vota, esta es una buena solución
Yusef
Esta es la solución correcta! Para futuros lectores, se implementa en memcache. Ver cgit.drupalcode.org/memcache/tree/unstable/…
BrianV
1

El Proxy de sesión proporciona un reemplazo genérico para el manejo de sesión de Drupal que se supone que funciona con varios backends.
Como tal, también se implementa drupal_session_destroy_uid().

Tenga en cuenta que la implementación de la sesión de Memcache API and Integration se considera inestable y que el responsable de mantenimiento de Redis recomienda el uso del Proxy de sesión .

Los problemas de manejo de sesiones consistentemente en varios backends se describen en el número 1260634 .

Fabian Iwand
fuente
0

En Drupal 7, podemos cerrar la sesión de un usuario si tenemos su User_ID usando db_delete ():

db_delete('sessions')->condition('uid', $User_ID)->execute();
houmem
fuente