Controle de usuarios online

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.