Fórum Impedir Login em Duplicidade #289687
27/07/2005
0
Até aqui tudo certo.
Minha dúvida: preciso fazer uma rotina para impedir que um mesmo usuário se logue duas vezes. Por exemplo, o usuário X acessa o programa no servidor e, sem efetuar o logoff, se loga também na estação. Pensei em criar um campo - Logado - na tabela de usuários e gravar o log ali e, quando fizer o logoff ou sair do programa, liberar o acesso daquele usuário novamente. Seria o ideal. O problema é se ocorre um desligamento inesperado do micro - uma queda de energia por exemplo. O sistema não faria a liberação daquele usuário e ele não poderia mais se conectar no programa.
Alguém tem alguma idéia de como eu poderia fazer isso?
Obrigado.
Valdirdill
Curtir tópico
+ 0Posts
27/07/2005
Rjun
Gostei + 0
27/07/2005
Valdirdill
E se o usuário se logar no servidor e, sem sair do programa, for numa estação e tentar se logar.
Por essa sua sugestão, quando o usuário tentasse se logar na estação, o sistema apagaria e liberaria para ele entrar novamente.
Entendeu?
Gostei + 0
27/07/2005
Rjun
1. Ele se loga no servidor. A aplicação registraria que ele o usuario ZÉ se logou e também registraria no login ZÉ que ele esta conectado.
2. Quando o usuário tentasse se logar em outra máquina o login dele estaria bloqueado.
3. Somente quando o usuário desligasse a aplicação em que ele está logado, na finalização da aplicação ela faria o registro de que naquela máquina ninguem está registrado e também liberaria o login do ZÉ.
4. Se caisse a luz, quando a maquina fosse reinicializa, ela verificaria que o ultimo usuario nao se deslogou e faria as liberações.
Gostei + 0
27/07/2005
Valdirdill
Vamos a um exemplo mais prático:
1) Quando o usuário Zé acessar o programa no serivdor, atribuo ´S´ para o campo LOGADO na tabela de cadastro de usuários.
2) Se ele tentar acessar o programa na estação, verifico que o campo LOGADO do BD está como ´S´ e não permito que acesse. No servidor ele não vai conseguir se conectar de novo, pois o programa não abre mais de uma vez simultaneamente na mesma máquina;
2) Quando o Zé sair do sistema no servidor, atribuo ´N´ parar o campo LOGADO. Agora, se ele for na estação e tentar acessar o programa, vai conseguir. Normal. Até aqui tudo certo, né?;
É assim que eu tinha feito.
Como eu diferencio, no passo 2 acima, se o campo LOGADO do registro Zé está como ´S´ porque o Zé ainda não saiu ou porque a energia havia caído?
Obrigado.
Gostei + 0
27/07/2005
Rjun
Gostei + 0
27/07/2005
Guilherme
Eu pensei em fazer assim:
assim que o usuario logar o nome do mesmo sera gravado em uma variavel, assim antes de logar o sistema iria ´conversar´ com todas outras estaçoes perguntando o valor da variavel que esta armazenado o nome do usuario ai caso alguma extaçao tenha a variavel com o mesmo nome de usuario o logon nao sera feito caso contrario sera logado normal isso tudo usando sockets (so que nao sei usar estou procurando material), assim evitaria o problema do usuario ficar logado no banco de dados em caso de queda de energia etc....
o q vc´s acham ??????
acho que o unico problema é que nao sei usar os sockets (Espero que vc´s saibam :D )
Gostei + 0
27/07/2005
Fabio Nascimento
Não é possível prever uma queda de energia, e com certeza, aonde o seu sistema está funcionando, alguém tem que ter um login com provilégios de ´admin´.
Caso haja uma queda de energia, como isso é uma excepcionalidade, algo que com certeza não vai acontecer com frequencia, esse ´admin´, terá poderes para apagar o registro que vai estar bloqueando o acesso de quem estava logado no momento da queda.
Logo, apenas adicione um usuário que possa logar sem restrições e que possa alterar os registros dessa tabela que controla os acessos.
Gostei + 0
28/07/2005
Guilherme
Mais estamos aki para achar uma forma de fazer isso !!!!!! Vao postando suas ideias :idea: !!!!!!
Gostei + 0
28/07/2005
Beppe
Com sockets é meio inviável, ao menos dá mais trabalho, pois ainda é preciso saber quem se logou.
Gostei + 0
28/07/2005
Guilherme
sei temos q usar alguma campo a caso o sistema ´caia´ ele fique totalmente em banco novamente !!!! nao sei si estou certo pois nunca usei mais acho q um campo calculado faz isso ne ???????
Gostei + 0
28/07/2005
Beppe
Campo calculado não é pra isso, mas a idéia é boa sim. Com n-camadas dá pra implementar isso, mas de forma geral, ao se conectar ao banco deve ser feito up UPDATE que limpasse os campos.
Gostei + 0
28/07/2005
Guilherme
Gostei + 0
28/07/2005
Beppe
E como vc iria indicar que um usuário se logou?
Gostei + 0
28/07/2005
Guilherme
eu bloqueio nos edit o uso do coringa ´´¬´´ (uso ib)
ai eu coloco um ibdataset (aba interbase)
coloco o seguinte comando no ibdataset
select cod,usuario,senha,conectado,permicoes from funcionarios where usuario = :usuario and senha = :senha
ai no botao logar coloco assim :
begin ibdataset1.close; ibdataset1.parambyname(´usuario´).asstring:=edit1.text; ibdataset1.parambyname(´senha´).asstring:=edit2.text; ibdataset.open; if tbdataset1.count = 1 then begin //mostra tela e aplica permiçoes ibdatasetconectado.value:=´S´; end else //tratamento end;
e no onclose do mainform assim :
ibdatasetconectado.value:=´N´;
pois o usuario ja esta localizado !!!!!!
:arrow: é +- isso ai pq fiz sem olhar na aplicaçao !!!!!![/code]
Gostei + 0
28/07/2005
Beppe
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)