Como vocês implementaria um controle de usuários logados?

4 respostas
D

Em um sistema web (TOMCAT), q tipo de abordagem vcs usariam para limitar a quantidade máxima de usuários logados ao mesmo tempo?

4 Respostas

S

Supondo que só existe um servidor, vc mantém uma lista de usuários logados no escopo de aplicação. Quando um usuário se loga, vc verifica o tamanho da lista. se o espaço foi esgotado vc nega o login. No logout vc remove da lista.
Só tenha atenção que o usuário pode fechar o browser e não dar logout direito.

O truque é colocar algum javascript na página que detecta o fechar da janela e envia um ajax que informa o servidor que o usuário saiu.

D

Eu também poderia diminuir o tempo de sessão expirada no web.xml, não?

R

Como é um caso simples com Tom Cat (sem um Portal, sign sign on e etc), Além dessa opção você pode controlar com listeners, ao expirar a sessão de um usuário, um evento é disparado limpando uma vaga da lista de limitação que pode ser armazenada no contexto da aplicação. Se não me engano é HttpSessionListener

public class SessionCounterListener implements HttpSessionListener {
 
  private static int totalActiveSessions;
 
  public static int getTotalActiveSession(){
	return totalActiveSessions;
  }
 
  @Override
  public void sessionCreated(HttpSessionEvent arg0) {
	totalActiveSessions++;
	System.out.println("sessionCreated - add one session into counter");
  }
 
  @Override
  public void sessionDestroyed(HttpSessionEvent arg0) {
	totalActiveSessions--;
	System.out.println("sessionDestroyed - deduct one session from counter");
  }	
}
web.xml
<web-app ...>
        <listener>
		<listener-class>com.mkyong.SessionCounterListener</listener-class>
	</listener>
</web-app>

Code link: http://www.mkyong.com/servlet/a-simple-httpsessionlistener-example-active-sessions-counter/

S

Eu também poderia diminuir o tempo de sessão expirada no web.xml, não?

Não. Essa não é a solução porque tem outros efeitos secundários ruins.
Vc deve desacoplar o conceito de “sessão” da api de sevlets do conceito de “sessão” de login. Um sessão de login pode sobreviver mais ou menos que uma sessão do servlet ( usando cookies, por exemplo, o famoso “Lembre de mim”).

Se vc quer controlar o tempo da sessão, controle dentro da sua aplicação assim vc desacopla o sistema do funcionamento do web container e tem mais flexibilidade para criar mecanismos mais uteis e com maior controle.

Criado 21 de janeiro de 2013
Ultima resposta 21 de jan. de 2013
Respostas 4
Participantes 3