Bagaimana saya bisa secara sistematis mengeluarkan pengguna lain di D7?

8

Di situs kami, kami memiliki akun klien, masing-masing dengan super administrator dan sub pengguna milik akun itu.

Kami ingin super admin dapat memaksa sub pengguna untuk keluar. Apa cara terbaik untuk menghancurkan sesi pengguna di Drupal yang berfungsi terlepas dari apakah informasi sesi disimpan dalam Redis, Memcache atau database?

Sebelum seseorang merasa tergoda untuk menyarankan user_logout (), itu menghancurkan sesi pengguna saat ini. Saya ingin pengguna saat ini dapat menghancurkan sesi pengguna yang berbeda !

BrianV
sumber
Hampir yakin kami sudah memiliki pertanyaan tentang ini. Saya tahu saya memiliki patch dalam ekstra-drush untuk dapat melakukan ini, tetapi belum dilakukan.
mpdonadio
Saya mencari-cari di sekitar DA, tetapi tidak berhasil. Saya akan meninjau tambalan Anda. EDIT: Sayangnya tambalan Anda hanya menangani kasus basis data. Kami berharap untuk menggunakan memcache mengingat banyaknya pengguna / sesi!
BrianV
1
Saya percaya pemblokiran / pemblokiran pengguna memiliki efek yang sama (kecuali mereka mungkin akan menerima notifikasi email tentang pemblokiran). Anda mungkin bisa menggunakannya hook_mail_alter()untuk mencegat surel itu dan menekannya.
tyler.frankenstein

Jawaban:

6

drupal_session_destroy_uid() terdengar seperti taruhan yang aman:

Mengakhiri sesi pengguna tertentu.

Implementasi inti membersihkan basis data, seperti yang Anda harapkan, tetapi modul apa pun yang mengesampingkan session.inc, dan tidak menyediakan implementasi yang berfungsi dari fungsi itu, pasti akan dianggap rusak (seperti user_delete_multiple()dan fungsi lainnya memerlukannya).

Jadi secara teori Anda harus dapat menggunakan fungsi itu terlepas dari penyimpanannya.

Clive
sumber
pilih, ini solusi yang bagus
Yusef
Ini solusi yang tepat! Untuk pembaca masa depan, ini diterapkan dalam memcache. Lihat cgit.drupalcode.org/memcache/tree/unstable/…
BrianV
1

Session Proxy menyediakan pengganti generik untuk penanganan sesi Drupal yang seharusnya bekerja dengan berbagai backend.
Karena itu juga mengimplementasikan drupal_session_destroy_uid().

Perhatikan bahwa implementasi sesi Memcache API dan Integrasi dianggap tidak stabil , dan bahwa pengelola Redis merekomendasikan penggunaan Session Proxy .

Masalah penanganan sesi secara konsisten di berbagai backend diuraikan dalam edisi 1260634 .

Fabian Iwand
sumber
0

Di Drupal 7, Kita bisa keluar pengguna jika kita memiliki User_ID menggunakan db_delete ():

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