tenho o seguinte código para controlar os usuários que estão online no momento em meu site
@Override
public void sessionCreated(HttpSessionEvent event) {
System.out.println("sassao criada!");
event.getSession().setMaxInactiveInterval(3);
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("sassao destruida!");
Usuario usuariologado = (Usuario) event.getSession().getAttribute("usuariologado");
if(usuariologado != null){
if(onlines.get(usuariologado.getNumero_matricula())==usuariologado){
onlines.remove(usuariologado.getNumero_matricula());
}
}
}
eu seto o tempo limite da sessão para ser invalida para 3 segundos mais o método sessionDestroyed só é executado depois de 40 a 50 segundos por que isso atá acontecendo alguém sabe?
ninguem? si alguém souber outra forma de controlar usuarios online eu aceito tambem :S
sibit01.
Nunca usei esse método, sempre realizo a configuração no web.xml
<session-config>
<session-timeout>10</session-timeout>
</session-config>
E até onde sei o tempo mínimo é 1 minuto. Não sei se é possível setar apenas alguns segundos.
o setMaxInactiveInterval(3) funciona e é em segundos, tenho que usar ele pra o usuario ficar offline o mais rápido possivel no site por que estou utilizando isso pra um chat web…
o pior é q o setMaxInactiveInterval() funciona nos 3 segundos ele invalida a session, mas o sessionDestroyed só é executado depois de muito tempo e deveria ser executado quando uma sessão fosse invalidada…
sibit01.
Estive lendo sobre esse método e realmente ele funciona em segundos. Mas não garante que a sessão será destruída em seguida. Apenas não permite que ela seja destruída antes.
Foi o que consegui entender. Notei também que tem alguma coisa entre às especificações 2.4 e 2.5 dos servlets.
Estou postando, pra tentar te ajudar na pesquisa. Mas nada concreto ainda, infelizmente.