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 !
hook_mail_alter()
para interceptar ese correo electrónico y suprimirlo.Respuestas:
drupal_session_destroy_uid()
suena como una apuesta segura: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.
fuente
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 .
fuente
En Drupal 7, podemos cerrar la sesión de un usuario si tenemos su User_ID usando db_delete ():
fuente