如何注销所有活动用户?


15

我不想将网站置于“维护模式”,而是将其置于完整的“只读模式”。有一个用于此的模块,但是,它仅防止“节点添加和编辑”。我想防止所有用户活动(包括登录和注册)基本上都从(清漆)缓存提供网站服务。作为附带的好处,如果站点中充满了请求,我将使用这种类型的“只读模式”。

我的问题:如何注销所有活动用户?然后可以使用钩子重定向登录和注册。

Answers:


13

据我所知,您可以清空会话表,所有用户都将被注销。但是,可能会出现问题,具体取决于您安装的模块。例如,实现的模块hook_user_logout()将永远不会触发其动作,这可能是一个问题。检查以确保所有已安装的模块都没有实现此挂钩。


4
正如@ F1234k所说,删除会话表将永远不会触发hook_user_logout()。但是,您可以自己触发它。从会话表中选择所有uid,然后对每个uid执行module_invoke_all('user_logout',$ user);`。但是,您可以按打开会话超过1小时的会话进行过滤(Drupal中的会话可以无限启用)。
2012年

谢谢。我需要触发注销钩子,否则我将为使用“永久登录”模块登录的用户获得WSOD。
uwe 2012年

13

您可以使用drush清空会话表

drush sqlq "TRUNCATE sessions"

或者您已经为表名设置了前缀:

drush sqlq --db-prefix "TRUNCATE {sessions}"

0

您可以通过更新挂钩强制注销所有用户:

/**
 * Force to logout all the users.
 */
function mymodule_update_7001() {
  db_truncate('sessions')->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.