すべてのアクティブユーザーをログアウトする方法は?


15

サイトを「メンテナンスモード」にする代わりに、完全な「読み取り専用モード」にしたいと思います。そのためのモジュールがありますが、それは「ノードの追加と編集」を防ぐだけです。ログインと登録を含むすべてのユーザーアクティビティを防止して、基本的に(ワニス)キャッシュからサイトを提供するようにします。副次的な利点として、サイトにリクエストが殺到した場合、このタイプの「読み取り専用モード」を使用します。

私の質問:すべてのアクティブユーザーをログアウトするにはどうすればよいですか?ログインと登録は、フックでリダイレクトできます。

回答:


13

私の知る限り、セッションテーブルを空にすると、すべてのユーザーがログアウトされます。ただし、インストールしたモジュールによっては、問題がある場合があります。たとえば、実装hook_user_logout()するモジュールはアクションを実行することはありません。インストールされているモジュールがこのフックを実装していないことを確認してください。


4
@ F1234kが言ったように、セッションテーブルを削除してもhook_user_logout()がトリガーされることはありません。しかし、あなたはそれを自分自身で引き起こすことができます。セッションテーブルからすべてのuidを選択し、それぞれに対して `module_invoke_all( 'user_logout'、$ user);`を実行します。ただし、セッションを1時間以上開いているものでフィルタリングすることもできます(Drupalのセッションは無制限に有効のままにできます)。
アレクサンドルサビン

ありがとう。ログアウトフックを起動する必要があります。それ以外の場合は、「永続的なログイン」モジュールでログインしているユーザーのWSODを取得します。
uwe

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();
}

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.