Em um sistema web (TOMCAT), q tipo de abordagem vcs usariam para limitar a quantidade máxima de usuários logados ao mesmo tempo?
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.
Eu também poderia diminuir o tempo de sessão expirada no web.xml, não?
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
[code]
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”);
}
}[/code]
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/
Eu também poderia diminuir o tempo de sessão expirada no web.xml, não?[/quote]
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.