Em nosso site, temos contas de clientes, cada uma com um superadministrador e subusuários pertencentes a essa conta.
Queremos que o superadministrador consiga forçar o sub-usuário a sair. Qual é a melhor maneira de destruir a sessão de um usuário no Drupal que funciona independentemente de as informações da sessão serem armazenadas no Redis, Memcache ou no banco de dados?
Antes que alguém se sinta tentado a sugerir user_logout (), isso destrói a sessão do usuário atual . Eu quero que o usuário atual consiga destruir a sessão de um usuário diferente !
hook_mail_alter()
para interceptar esse email e suprimi-lo.Respostas:
drupal_session_destroy_uid()
soa como uma aposta segura:A implementação principal limpa o banco de dados, como seria de esperar, mas qualquer módulo que substitua o session.inc e não forneça uma implementação funcional dessa função certamente será considerado quebrado (como
user_delete_multiple()
e outras funções precisam).Portanto, em teoria, você deve poder usar essa função independentemente do armazenamento.
fonte
O Proxy de Sessão fornece uma substituição genérica para o tratamento de sessões do Drupal, que deveria funcionar com vários back-ends.
Como tal, também implementa
drupal_session_destroy_uid()
.Observe que a implementação da sessão da API e da integração do Memcache é considerada instável e que o mantenedor do Redis recomenda o uso do Proxy de Sessão .
Os problemas de manipulação de sessões de maneira consistente em vários back-ends são descritos na edição 1260634 .
fonte
No Drupal 7, podemos desconectar um usuário se tivermos seu User_ID usando db_delete ():
fonte