Proibir acesso ao mesmo cliente

7 respostas
F

Alguém sabe como proibir o acesso ao mesmo cliente em diferentes máquinas?Estou tentando implementar isso mas tó apanhando legal.
Estou salvando na base de dados sempre que o usuário se logar, o problema é quando ele sair da aplicação. Com javascript e browsers diferente o código nem sempre funciona.
Pois sempre que o usuário sair da aplicação tenho que ir na base e mudar o estado do usuário

window.onbeforeunload = logout
<script type="text/javascript">
function logout(){
    //..........
}
O foda é que esse evento nem sempre é chamado pelo IExplorer e sem falar que o mesmo evento é chamado qd o usuário faz um refresh da página!! Uma coisa simples de se fazer e tó levando uma surra desgraçada!!!!!!!!!!!!!!!!!!!!!!

7 Respostas

Hebert_Coelho

Oq vc pode é fazer é que quando o usuário logar, verificar se ele já está logado em algum outro lugar. Vc salvaria em algum lugar um id ou alguma que identificaria a primeira máquina do cara.

AO logar novamente vc veria se o ID de login mudou e verificaria isso a cada request, através de um filtro por exemplo. Se o ID solicitado estiver diferente do login atual, é pq o cara mudou de máquina.

Meio feio isso mas é o modo que eu consegui pensar.

A

Eu seguiria os seguintes passos:

  • Criaria uma lista de usuários logados no contexto de aplicação.
    Não salvaria no banco pois se tirar a app do ar, não terá mais ninguém logado.
    Se rodar sua app em mais de um servidor daí pode ter problemas com isso, precisará de um controle mais apurado.

  • Utilize algum mecanismo de keep-alive para manter as sessões no ar
    Configurando um tempo de sessão baixo, tipo 1 minuto, e algum dispositivo que dê refresh na sessão constantemente
    ( O GUJ faz algo semelhante…dá uma olhada no fonte do html)

  • Quando alguém logar, verifica a lista de logados e registra o login lá.
    Quando houver um login do mesmo cliente, você decide como sua aplicação tratará:
    Matando a sessão anterior, bloqueando a nova, vai da sua necessidade.

  • Quando o cliente efetuar logout normalmente, simplesmente tira da lista.

Com esse mecanismo acredito que consiga superar esse problema do unload.

F

AbelBueno:
Eu seguiria os seguintes passos:

  • Criaria uma lista de usuários logados no contexto de aplicação.
    Não salvaria no banco pois se tirar a app do ar, não terá mais ninguém logado.
    Se rodar sua app em mais de um servidor daí pode ter problemas com isso, precisará de um controle mais apurado.

  • Utilize algum mecanismo de keep-alive para manter as sessões no ar
    Configurando um tempo de sessão baixo, tipo 1 minuto, e algum dispositivo que dê refresh na sessão constantemente
    ( O GUJ faz algo semelhante…dá uma olhada no fonte do html)

  • Quando alguém logar, verifica a lista de logados e registra o login lá.
    Quando houver um login do mesmo cliente, você decide como sua aplicação tratará:
    Matando a sessão anterior, bloqueando a nova, vai da sua necessidade.

  • Quando o cliente efetuar logout normalmente, simplesmente tira da lista.

Com esse mecanismo acredito que consiga superar esse problema do unload.


Pois é!
Na real, tentei aqui no guj me logar de 2 pcs diferente e o mesmo deixou.
Tentarei a ideia da lista que me parece a melhor o problema porém será sempre quando o usuário por algum motivo sair da aplicação sem que a aplicação perceba.

F

Alguém sabe pq o evento de fechar no browser no IE equivale é a tecla 0 que é igual a tecla de F5?

F

Consegui, mas que parto!!!

rafaduka

Poderia compartilhar conosco? :roll:

F

Claro,
Acrescentei uma coluna na tabela usuário em_uso do tipo boolean assim tenho o controle do logout e login.
Um problema aparentemente simples (usando Chrome, Firefox foi fácil) foi identificar quando o usuário saísse da aplicação. O Explorer usa o mesmo código de teclado seja para atualizar que para sair do navegador. Essa função do windows.beforeunload é chamada em ambos os casos!!
Depois de umas cabeçadas e bastante google search encontrei o seguinte:

/*Essa função é  para identificar se se está atualizando ou saindo da aplicação, pois a PORCÁRIA do IE usa o mesmo código de tela! Esse era o problema no CHrome funcionava blz, mas  quando o usuário se logava no IE  e no Chrome melava tudo!!*/
window.onunload = function(event) {
{
if (window.event.clientX < 0 && window.event.clientY < 0){
   logout();
 }
 }
 }
/* função ajax para fazer o logout da aplicação*/
 jQuery(window).bind("beforeunload", 
		 function  logout(){
	    	 $(document).ready(function() {
	    	     $.ajax({
	    	 	        type: "GET",		   	
	    	 			url: "sua url",		   	
	    	 			success: function(){
	    	         	   				
	    		        }		   	
	    	 		});
	    	    });
	    	 	    		
 });
Criado 5 de janeiro de 2012
Ultima resposta 6 de jan. de 2012
Respostas 7
Participantes 4