D7で別のユーザーをプログラムでログアウトするにはどうすればよいですか?


8

私たちのサイトには、クライアントアカウントがあり、それぞれにそのアカウントに属するスーパー管理者とサブユーザーがいます。

特権管理者がサブユーザーにログアウトを強制できるようにしたい。セッション情報がRedis、Memcache、またはデータベースのどちらに保存されているかに関係なく機能するDrupalでユーザーのセッションを破棄する最良の方法は何ですか?

誰かがuser_logout()を提案するように誘惑される前に、それは現在のユーザーのセッションを破壊します。現在のユーザーが別のユーザーのセッションを破棄できるようにしたいのですが。


ほぼ間違いなく、これについてはすでに質問があります。これを行うためのdrush-extrasにパッチがあることは知っていますが、コミットされていません。
mpdonadio

私はグーグル検索してDAを検索しましたが、うまくいきませんでした。パッチを確認します。編集:残念ながら、パッチはデータベースのケースのみを処理します。多数のユーザー/セッションを考慮してmemcacheを使用することを望んでいました!
BrianV

1
ユーザーをブロック/ブロック解除しても同じ効果があると思います(ブロック解除の電子メール通知がユーザーに送信されることを除いて)。おそらくhook_mail_alter()、その電子メールを傍受して抑制するために使用できます。
tyler.frankenstein

回答:


6

drupal_session_destroy_uid() 安全な賭けのように聞こえます:

特定のユーザーのセッションを終了します。

コア実装は予想どおりデータベースをクリアしますが、session.incをオーバーライドし、その関数の機能する実装を提供しないモジュールは、確実に壊れていると見なされます(user_delete_multiple()他の関数が必要とするため)。

したがって、理論的には、ストレージに関係なくその機能を使用できるはずです。


アップ投票は、これは良い解決策である
ユセフ

これは正しい解決策です!将来の読者のために、memcacheに実装されています。cgit.drupalcode.org/memcache/tree/unstable/…を
BrianV

1

セッションプロキシは、さまざまなバックエンドで動作するはずのDrupalのセッション処理の一般的な代替品を提供します。
そのため、それも実装しdrupal_session_destroy_uid()ます。

Memcache APIと統合のセッション実装は不安定であると見なされ、Redis のメンテナーはセッションプロキシの使用を推奨していることに注意してください。

さまざまなバックエンド間で一貫してセッションを処理することの問題は、問題1260634で概説されています。


0

Drupal 7では、db_delete()を使用してユーザーIDがある場合、ユーザーをログアウトできます。

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