如何以编程方式在D7中注销另一个用户?


8

在我们的网站上,我们有客户帐户,每个帐户都有一个超级管理员和属于该帐户的子用户。

我们希望超级管理员能够强制子用户注销。不管会话信息存储在Redis,Memcache还是数据库中,销毁在Drupal中有效的用户会话的最佳方法是什么?

在有人不愿意建议user_logout()之前,这会破坏当前用户的会话。我希望当前用户能够销毁其他用户的会话!


几乎可以肯定,我们已经对此有疑问。我知道我在drush-extras中有一个补丁程序可以执行此操作,但尚未提交。
mpdonadio

我在DA周围搜索和搜索,但是没有运气。我将审核您的补丁。编辑:不幸的是,您的补丁仅处理数据库情况。鉴于大量的用户/会话,我们希望使用内存缓存!
BrianV 2015年

1
我相信阻止/取消阻止用户具有相同的效果(除非他们可能会收到有关取消阻止的电子邮件通知)。您可能会hook_mail_alter()用来截获该电子邮件并将其隐藏。
tyler.frankenstein 2015年

Answers:


6

drupal_session_destroy_uid() 听起来很安全:

结束特定用户的会话。

正如您所期望的那样,核心实现清除了数据库,但是任何覆盖session.inc且未提供该功能的有效实现的模块肯定会被视为已损坏(因为user_delete_multiple()其他功能也需要它)。

因此,从理论上讲,无论存储在哪里,您都应该能够使用该功能。


投票,这是一个很好的解决方案
Yuseferi 2015年

这是正确的解决方案!对于将来的读者,它在内存缓存中实现。见cgit.drupalcode.org/memcache/tree/unstable/...
BrianV


0

在Drupal 7中,如果使用db_delete()获得用户名,则可以注销用户:

db_delete('sessions')->condition('uid', $User_ID)->execute();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.