Fórum CONTROLE DE USUARIOS #15150
03/02/2010
Olá, estou desenvolvendo um aplicativo e me deparei com a seguinte questao como controlar os login dos usuarios, tenho um servidor de aplicacao em delphi 2010 mais ainda nao implementei essa parte, tipo se o usuario estiver logado em uma maquina x o mesmo usuario nao pode logar em outra maquina em quanto a sessao dele estiver ativa na maquina x, como implementar essa regra no servidor tipo to meio sem noçao pra isso!
Posts
03/02/2010
Rodrigo Mourão
Olá Amigo,
O que eu faço nas minhas aplicacoes é o seguinte: Eu tenho um metodo no servidor de app para login e um para logout. Quando o usuario loga eu marco no cadastro dele em um campo chamado logado como true.
Assim quando eu vou verificar o login vejo se este campo esta true. Se estiver true entao ele esta logado.
Quando ele faz logout entao eu mudo o campo logado para false. Voce pode perguntar mas se o cara fechar a aplicacao?
Simples como eu sei quem esta locado no onClose do form principal eu chamo o logout.
Acho que isso ajuda.
Duvidas estou a disposição.
Abs.
e se o cara finalizar o processo da aplicacao?
como fazer? ele vai fikar logado la no servidor nao? ja que no cadastro dele foi setado para true
08/02/2010
Rodrigo Mourão
Olá Paulo,
Eu lhe passei uma solução que atende em boa parte dos casos. Agora o problema levantado por você daria mesmo que seja utilizada outra técnica pois de uma forma ou de outro o servidor de app precisar ser informado que o usuário não esta mais logado, seja com um flag no banco ou não.
O usuário encerrar o processo da aplicação não é uma coisa usual, mas pode acontecer e isso realmente travaria o usuário seja usando um flag no banco ou outra técnica qualquer pois ai o processo da aplicação foi interrompido. Neste caso, na minha humilde opinião não seria problema da rotina mas sim da interrupção da aplicação.
Bem pode ser viagem minha mas uma opção seria sempre que o usuário invocar um método no servidor vc gravaria data e hora. Assim no login vc testaria se ele esta logado e a hora da ultima chamada ao servidor. Caso no login o usuário esteja marcado como logado vc verificaria o intervalo da ultima chamada ate o presente momento. Se for superior a 5 min por exemplo vc setava o flag para false e efetuaria um novo login. Neste caso se o usuário por algum motivo para o processo da aplicação teria que aguardar 5 min ate poder se logar de novo.
E um sugestão.
Att,
Não seria mais usual eu colocar um parametro no meu login tipo alem do login e senha o kra me informar o nome da maquina? tipo login (usuario: shortstring; password: shortstring; machine: shortstring) ae eu testo
if (machine = Fmachine) entao logo o cidadao dnovo? ja que o windows nao aceita duas maquinas com o mesmo nome entao essa tecnica pode ate ser valida nao? ja c o kara tentar acessar de outra maquina vai dar um exception dizendo que o usuario ja tem uma sessao aberta pois ae eu vou verificar se o usuario ja esta logado em uma maquina diferente da que ele me informou.
09/02/2010
Rodrigo Mourão
Tai, uma coisa que não havia pensado.
Agora como seria feito o LogOff. Imagine que o cara esta trabalhando, esta logado e a maquina dele queima (muito azar rsrsrsrsr). Se ele tentar logar em outro maquina então não vai conseguir. O ideia é perfeita sim, so temos que tratar isso. embora nao seja comum a maquina queimar mas pode acontecer.
Fora isso achei a solução muito interessante.
Att,
11/02/2010
Rodrigo Mourão
Olá amigo,
Há mais alguma dúvida ?? Podemos encerrar o chamado ??
Att,
Pode fechar sim o chamado!