Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Magnoweb

Evitando login simultâneo

Recommended Posts

Boas,

 

Estou buscando uma solução para evitar o acesso simultâneo ao sistema, quando o usuário faz o acesso ao sistema registro, código da sessão (Session.ID), codigo do usuário, IP, e status (indicando que o usuário está logado) em uma tabela (tbl_logAcesso).

 

O problema acontece quando o usuário sai do sistema.

 

Depois de procurar muito na net e tentar de várias formas resolvi abrir esse tópico, baseado no tópico abaixo:

http://forum.imasters.com.br/index.php?/topic/229771-como-impedir-acesso-simultaneo/

 

Estou utilizando diversas formas de "logout", vou citar algumas.

 

- Clicar com o botão "Sair" da aplicação - Já tratado com asp

- Fechadno o navegado - Já tratado com ajax

- Timeout - Já tratado com asp e javascript

- Desligamento inexperado do computador ou caso o browser não seja fechado corretamente (AQUI MORA O PROBLEMA).

 

Tentei solucionar o problema com o global.asa (Session_OnEnd), o problema está como identificar a sessão que foi encerrada, ja tentei com cookie - mas como previa não funcionou - por último tentei o seguinte:

 

registro as sessões em uma variável de aplicação (Array)

 

if isNull(Application("activeusers")) = true then
	Application("activeusers") = Session(Session.sessionID)
else
	Application("activeusers") = Application("activeusers")&","&Session(Session.sessionID)
end if

no evento Session_OnEnd, tento verificar as sessões não-ativas e atualizar o status no banco, sem exito.

 

arrUser = Split(Application("activeusers"),",")
for i=0 to UBound(arrUser)
	if (isNull(Session(arrUser(i)))=true) OR (Session(arrUser(i)) = "") then
		Set Oconn = Server.CreateObject("ADODB.Connection")
		Oconn.ConnectionString="Provider=SQLOLEDB.1;Data Source=192.168.0.100;Initial Catalog=banco;User Id=si;Password=*********;"
		Oconn.open
		
		Oconn.Execute("INSERT INTO tbl_logAcesso (cod_sessao,cod_usuario,nb_ip,navegador) VALUES (arrUser(i),71,'IP','MagnoWeb')")
			
		if UBound(arrUser) > 1 then
			Application("activeusers") = Replace(Application("activeusers"),",arrUser(i)","")
		else
			Application("activeusers") = Null
		end if
		
	end if
Next

Nem sei mais oq fazer, alguém pode contribuir com alguma sugestão??? raciocínio ja se foi :huh: .

 

 

vlw,

Magnoweb B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desconheço uma forma de fechar 100% essa questão

 

O que normalmente se faz para considerar desconectado alem do clássico botão de logout seria o uso de um tempo de inatividade no sistema para dizer que o usuário está off

 

Aqui no fórum por exemplo é de 30 minutos

Compartilhar este post


Link para o post
Compartilhar em outros sites

o mais coerente é usar tempo de inatividade, mas depende de cada critério e segmento do site, dê uma pesquisada no fórum, que existem ótimos artigos sobre isso, ja para o user por exemplo, fez login e tentar logar novamente, você pode usar uma session, tipo session("logado"), que ficrá true , caso ele faça login , evitando legar na mesma máquina, e para não logar em maquinas diferentes, use um bd, vinculado ao tempo de inatividade, quando estiver logado um campo no bd, por exemplo, logado será igual true e quando fizer logout, você dá um update no bd, para passar a false.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.