Breve resoconto:
codice servlet:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ClienteServlet extends HttpServlet{
protected HttpSession session;
protected JdbcConnessioni jc;
protected HttpSessionListener listener;
public ClienteServlet(){
listener=new InactivityListener();
}
public void init(ServletConfig config)throws ServletException{
super.init(config);
jc=new JdbcConnessioni();
}
public void service(HttpServletRequest, HttpServletResponse){
...//operazioni varie
}
}
Associata alla servlet ho questa classe listener
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class InactivityListener implements HttpSessionListener {
private ServletContext context=null;
private HttpSession session;
public InactivityListener(){}
public void sessionCreated(HttpSessionEvent event) {
if(context==null){
storeInServletContext(event);
}
}
public void sessionDestroyed(HttpSessionEvent event) {
JdbcConnessioni conn=(JdbcConnessioni)session.getAttribute("connes sioni");
conn.rimuovi((String)session.getAttribute("user")) ;
context=null;
}.
private void storeInServletContext(HttpSessionEvent event) {
session = event.getSession();
context = session.getServletContext();
}
}
Quando gestisco una connessione singola funziona perfettamente, ma quando faccio più login, al timeout, mi rimuove solo l'ultimo utente (anche se il logout lo faccio con la sessione di un altro utente).
Forse sto dicendo una corbelleria, ma penso che si debba costruire una lista che contiene tanti oggetti listener per ogni HttpSession che viene creata.
Fatemi sapere...