Este tipo de situação pode ocorrer facilmente quando você está desenvolvendo uma aplicação.
Após este tipo de dificuldade ter aparecido, resolvi criar uma classe em PHP para resolver este problema.
Nesta classe, considerei as seguintes hipóteses:
- O usuário efetua o login e fecha o navegador sem efetuar o logout.
- O usuário efetua o login em uma máquina e repassa seus dados de conexão para terceiros que o utilizam no momento em que ele está logado e usando o sistema.
- Evitar roubo de sessão.
- Quando o usuário efetuar um novo login, este irá desconectar todas as sessões existentes (ítens 1 e 2 acima). Afinal uma pessoa não pode estar em dois lugares ao mesmo tempo.
- Criar um token de sessão que possa ser verificado com base em alguns dados fixos (por exemplo o id de usuário no sistema ou o seu nome), dinâmicos (id de sessão, endereço ip) e variáveis (como a senha do usuário).
- Geração do id de sessão de tempos em tempos.
- Duração da sessão com tempo fixo.
- Garbage collection para as sessões.
E, para um reaproveitamento de código e interdependência de banco de dados, utilizei o AdoDB. Assim, a mesma classe pode ser utilizada tanto com MySQL quanto PostgreSQL ou qualquer outro banco suportado pela AdoDB.
Após isto tudo, codifiquei minha classe. Em cada página instanciei-a e chamo apenas um método que faz todas as verificações. Caso uma delas não seja satisfeita, o usuário pode ser redirecionado para uma página de login, por exemplo, indicando o motivo pelo qual o login está sendo requisitado.
Em sua aplicação, como você tem feito para controlar múltiplos logins de um mesmo usuário?
Nenhum comentário:
Postar um comentário