Comment déconnecter par programmation un autre utilisateur dans D7?

8

Sur notre site, nous avons des comptes clients, chacun avec un super administrateur et des sous-utilisateurs appartenant à ce compte.

Nous voulons que le super administrateur puisse forcer les sous-utilisateurs à se déconnecter. Quelle est la meilleure façon de détruire la session d'un utilisateur dans Drupal qui fonctionne, que les informations de session soient stockées dans Redis, Memcache ou la base de données?

Avant que quelqu'un ne soit tenté de suggérer user_logout (), cela détruit la session de l'utilisateur actuel . Je veux que l'utilisateur actuel puisse détruire la session d' un autre utilisateur!

BrianV
la source
Presque sûr que nous avons déjà une question à ce sujet. Je sais que j'ai un correctif dans drush-extras pour pouvoir le faire, mais il n'a pas été validé.
mpdonadio
Je suis allé sur Google et j'ai cherché autour de DA, mais pas de chance. Je vais revoir votre patch. EDIT: Votre patch ne gère malheureusement que le cas de la base de données. Nous espérions utiliser memcache étant donné le grand nombre d'utilisateurs / sessions!
BrianV,
1
Je pense que bloquer / débloquer l'utilisateur a le même effet (sauf qu'il recevra probablement une notification par e-mail du déblocage). Vous pourriez probablement utiliser hook_mail_alter()pour intercepter cet e-mail et le supprimer.
tyler.frankenstein

Réponses:

6

drupal_session_destroy_uid() sonne comme une valeur sûre:

Met fin à la ou aux sessions d'un utilisateur spécifique.

L'implémentation principale efface la base de données, comme vous vous en doutez, mais tout module qui remplace session.inc, et ne fournit pas une implémentation fonctionnelle de cette fonction, serait sûrement considéré comme rompu (car d' user_delete_multiple()autres fonctions en ont besoin).

Donc, en théorie, vous devriez pouvoir utiliser cette fonction quel que soit le stockage.

Clive
la source
voter, c'est une bonne solution
Yuseferi
C'est la bonne solution! Pour les futurs lecteurs, il est implémenté dans memcache. Voir cgit.drupalcode.org/memcache/tree/unstable/…
BrianV
1

Le proxy de session fournit un remplacement générique pour la gestion de session de Drupal qui est censé fonctionner avec divers backends.
En tant que tel, il met également en œuvre drupal_session_destroy_uid().

Notez que l'implémentation de session de Memcache API and Integration est considérée comme instable et que le responsable de Redis recommande l'utilisation de Session Proxy .

Les problèmes de gestion cohérente des sessions sur différents backends sont décrits dans le problème 1260634 .

Fabian Iwand
la source
0

Dans Drupal 7, nous pouvons déconnecter un utilisateur si nous avons son User_ID en utilisant db_delete ():

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