Wie kann ich einen anderen Benutzer in D7 programmgesteuert abmelden?

8

Auf unserer Website haben wir Kundenkonten mit jeweils einem Superadministrator und Unterbenutzern, die zu diesem Konto gehören.

Wir möchten, dass der Superadministrator Unterbenutzer zum Abmelden zwingen kann. Wie kann die Sitzung eines Benutzers in Drupal am besten zerstört werden, unabhängig davon, ob die Sitzungsinformationen in Redis, Memcache oder in der Datenbank gespeichert sind?

Bevor sich jemand versucht fühlt, user_logout () vorzuschlagen, wird die Sitzung des aktuellen Benutzers zerstört . Ich möchte, dass der aktuelle Benutzer die Sitzung eines anderen Benutzers zerstören kann !

BrianV
quelle
Fast sicher haben wir schon eine Frage dazu. Ich weiß, dass ich einen Patch in Drush-Extras habe, um dies tun zu können, aber er wurde nicht festgelegt.
mpdonadio
Ich googelte herum und suchte in DA, aber kein Glück. Ich werde Ihren Patch überprüfen. BEARBEITEN: Ihr Patch behandelt leider nur den Datenbankfall. Wir hatten gehofft, angesichts der großen Anzahl von Benutzern / Sitzungen Memcache verwenden zu können!
BrianV
1
Ich glaube, dass das Blockieren / Entsperren des Benutzers den gleichen Effekt hat (außer dass er wahrscheinlich eine E-Mail-Benachrichtigung über das Entsperren erhält). Sie könnten hook_mail_alter()diese E-Mail wahrscheinlich abfangen und unterdrücken.
tyler.frankenstein

Antworten:

6

drupal_session_destroy_uid() klingt nach einer sicheren Wette:

Beendet die Sitzung (en) eines bestimmten Benutzers.

Die Kernimplementierung löscht die Datenbank wie erwartet, aber jedes Modul, das session.inc überschreibt und keine funktionierende Implementierung dieser Funktion bietet, wird sicherlich als fehlerhaft angesehen (wie user_delete_multiple()und andere Funktionen es benötigen).

Theoretisch sollten Sie diese Funktion also unabhängig vom Speicher verwenden können.

Clive
quelle
abstimmen, das ist eine gute Lösung
Yusef
Das ist die richtige Lösung! Für zukünftige Leser ist es in memcache implementiert. Siehe cgit.drupalcode.org/memcache/tree/unstable/…
BrianV
1

Der Sitzungsproxy bietet einen generischen Ersatz für die Sitzungsbehandlung von Drupal, die mit verschiedenen Backends funktionieren soll.
Als solches implementiert es auch drupal_session_destroy_uid().

Beachten Sie, dass die Sitzungsimplementierung der Memcache-API und -Integration als instabil angesehen wird und dass der Betreuer von Redis die Verwendung des Sitzungsproxys empfiehlt .

Die Probleme bei der konsistenten Behandlung von Sitzungen über verschiedene Backends hinweg sind in Ausgabe 1260634 beschrieben .

Fabian Iwand
quelle
0

In Drupal 7 können wir einen Benutzer abmelden, wenn wir seine Benutzer-ID mit db_delete () haben:

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