Comment déconnecter tous les utilisateurs actifs?

15

Au lieu de mettre mon site en "mode maintenance", je voudrais le mettre en "mode lecture seule" complet. Il existe un module pour cela, cependant, il empêche uniquement "l'ajout et la modification de nœuds". Je voudrais empêcher toute activité des utilisateurs, y compris la connexion et l'enregistrement, pour que le site soit servi à partir du cache (vernis). Comme avantage secondaire, j'utiliserais ce type de "mode lecture seule" si le site est inondé de demandes.

Ma question: comment déconnecter tous les utilisateurs actifs? La connexion et les enregistrements que je peux ensuite rediriger avec un crochet.

uwe
la source

Réponses:

13

Autant que je sache, vous pouvez vider la table des sessions et tous les utilisateurs seront déconnectés. Il peut cependant y avoir un problème, selon les modules que vous avez installés. Par exemple, les modules qui implémentent hook_user_logout()ne seront jamais déclenchés, ce qui pourrait être un problème. Assurez-vous qu'aucun de vos modules installés n'implémente ce hook.

F1234k
la source
4
Comme l'a dit @ F1234k, la suppression de la table de session ne déclenchera jamais hook_user_logout (). Mais, vous pouvez simplement le déclencher vous-même. Sélectionnez tous les UID dans la table des sessions et exécutez `module_invoke_all ('user_logout', $ user);` pour chacun d'eux. Vous pouvez cependant filtrer par ceux dont la session est ouverte depuis plus d'une heure (les sessions dans Drupal peuvent rester activées sans limite).
Alexandru Savin
Merci. Je vais devoir déclencher les hooks de déconnexion, sinon j'obtiens un WSOD pour les utilisateurs qui sont connectés avec le module "connexion persistante".
uwe
13

Vous pouvez vider la table des sessions à l'aide de drush

drush sqlq "TRUNCATE sessions"

ou si vous avez défini des préfixes pour les noms de table:

drush sqlq --db-prefix "TRUNCATE {sessions}"
batigolix
la source
0

Vous pouvez forcer la déconnexion de tous les utilisateurs via un hook de mise à jour:

/**
 * Force to logout all the users.
 */
function mymodule_update_7001() {
  db_truncate('sessions')->execute();
}
milkovsky
la source
0

Utiliser le module de déconnexion forcée .

traits

  • Formulaire de paramètres où vous pouvez activer et désactiver (Forcer la déconnexion).
  • Autorisation afin que vous puissiez exclure certains rôles utilisateur si vous souhaitez exclure l'administrateur par exemple.
Saud Alfadhli
la source