Jump to content

Archived

This topic is now archived and is closed to further replies.

netcorsair

Bloquear acesso simultâneo do mesmo usuário

Recommended Posts

Aew Pessoal.

 

Gostaria de bloquear que um mesmo usuario faça o login mais de uma vez no sistema ao mesmo tempo em máquinas diferentes.

 

Exemplo:

 

Sendo o meu login = teste, eu estiver logado na maquina A, não é permitido que se logue com o usuário teste em outras máquinas enquanto a sessão da máquina A não expirar ou for feito logout pelo usuário.

 

Alguém sabe como posso fazer ou tem alguma indicação de site para que eu consiga implementar isso???

 

Vlw.

Share this post


Link to post
Share on other sites

Não sei como você persiste as informações do usuário e sessões, mas vamos imaginar que haja uma tabela chamada 'usersessions'.

QUando você for fazer a busca sql pelas informações do usuário para logá-lo, adicione o critério mais ou menos assim:

where id_usuario not in (select id_usuario from usersession)

Share this post


Link to post
Share on other sites

eu faria pegando o IP da maquina e adicionando numa tabela..

 

se o ip for diferente desloga ou exibe uma mensagem..

Share this post


Link to post
Share on other sites

Bom eu iria falar tbm sobre pegar o IP mais pelo jeito que eu sei o REMOTE_ADDR pega o IP da NET, ai num da certo.

Prefiro do jeito do Marcio.

Share this post


Link to post
Share on other sites

Pode fazer assim:

 

Criar um campo na tabela, "ativo 0,1'.

 

Quando logar faz o update do campo para 1.

Quando deslogar faz o update do campo para 0.

 

Assim você pode fazer um:

 

if(ativo == 1)

Não pode logar

else

Pode logar.

 

Meio complicado?

Share this post


Link to post
Share on other sites

O jeito do Márcio é o melhor, pois usa o ID da sessão.

 

IP não dá, pois vários usuários de uma mesma rede têm o mesmo IP, mas podem acessar o sistema com logins diferentes. Logo, bloqueio por IP bloquearia coisa a mais.

 

O campo "ativo" pode funcionar, mas só se houver um timeout, pois o usuário pode fechar o navegador sem clicar em Sair, sem que o valor de ativo passe para zero.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Share this post


Link to post
Share on other sites

sei que o tópico é antigo, mas me deparei essa semana com esse problema com uma area de assinantes de Jornal, quebrei a cabeça mas resolvi na seguinte lógica:

O Jornal tem um banco de dados completo de cpf e/ou cnpj dos clientes, então apenas importei para meu banco, o cliente para começar a ultizar o jornal online, verificava seu cpf/cnpj, o preenchendo no campo, apos confirmado abre uma tela onde ele coloca o email e senha, e nesse mesmo momento criei uma tabela separada que se relaciona com a tb_clientes, com valor logado (N, S), no momento do cadastro do email e senha do cliente ele ainda nao tem registro na nova tabela que tem o campo logado, ai quando ele cadastra, cria um registro com valor N,

quando ele efetua seu 1º login, o valor passa para S (estou usando cookie), e meu tempo no cookie é de 5 anos que deixei configurado, mas blz, então o cliente pode sair e entrar a hora que quizer no site que ele sempre estara logado a nao ser que clique em sair (logout) onde o valor de logado passa para N

está tudo ok, apenas um fica logado como queria, ai me deparei com o problema de o cliente formatar a maquina ou limpar o navegador sem sair (logout) do sistema, então, eu coloquei como vc verão na imagem, uma opção extra, que quando o cliente tenta logar da a mensagem que ele ja está logado, mas tem a opção de ele "limpar a sessao", inserindo o email de cadastro dele, onde chegara um email criptografado com link, fazendo um update da tabela para votlar o logar para N, essa foi a minha solução acho que consegui de uma forma boa simplificar o que queria, sem ter que mecher muito no código para criar sessaão verificar ip essas coisas:

213rm6g.jpg

talvez essa lógica ajude algumas pessoas, pq procurei muito por essa solução tbm :)

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.