Come posso disconnettere programmaticamente un altro utente in D7?


8

Sul nostro sito abbiamo account cliente, ognuno con un super amministratore e utenti secondari appartenenti a tale account.

Vogliamo che il super amministratore sia in grado di forzare gli utenti secondari a disconnettersi. Qual è il modo migliore per distruggere la sessione di un utente in Drupal che funziona indipendentemente dal fatto che le informazioni sulla sessione siano memorizzate in Redis, Memcache o nel database?

Prima che qualcuno si senta tentato di suggerire user_logout (), ciò distrugge la sessione dell'utente corrente . Voglio che l'utente corrente sia in grado di distruggere la sessione di un altro utente!


Quasi sicuro che abbiamo già una domanda su questo. So di avere una patch in extra-drush per poterlo fare, ma non è stato commesso.
mpdonadio

Ho cercato su Google e cercato intorno a DA, ma senza fortuna. Esaminerò la tua patch. EDIT: purtroppo la tua patch gestisce solo il caso del database. Speravamo di usare memcache dato il gran numero di utenti / sessioni!
BrianV,

1
Credo che il blocco / sblocco dell'utente abbia lo stesso effetto (tranne che probabilmente riceveranno una notifica via e-mail dello sblocco). Probabilmente potresti usare hook_mail_alter()per intercettare quell'e-mail e sopprimerla.
tyler.frankenstein,

Risposte:


6

drupal_session_destroy_uid() sembra una scommessa sicura:

Termina le sessioni di uno specifico utente.

L'implementazione di base cancella il database, come ci si aspetterebbe, ma qualsiasi modulo che sovrascrive session.inc e non fornisce un'implementazione funzionante di quella funzione, sarebbe sicuramente considerato rotto (poiché user_delete_multiple()altre funzioni ne hanno bisogno).

Quindi in teoria dovresti essere in grado di utilizzare quella funzione indipendentemente dalla memoria.


vota, questa è una buona soluzione
Yuseferi,

Questa è la soluzione corretta! Per i lettori futuri, è implementato in memcache. Vedi cgit.drupalcode.org/memcache/tree/unstable/…
BrianV


0

In Drupal 7, possiamo disconnettere un utente se abbiamo il suo User_ID usando db_delete ():

db_delete('sessions')->condition('uid', $User_ID)->execute();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.