Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it L'avatar di bobc
    Registrato dal
    Feb 2004
    Messaggi
    245

    [java-servlet]Evento chiusura browser

    salve a tutti,

    Avrei un problema sulle servlet. In particolare dovrei gestire
    connessioni da parte di più client. Ogni client ovviamente per accedere a determinate funzionalità deve fare il login e per uscire da queste, il logout (e qundi dovrei aggiornare una tabella che contiene gli utenti connessi). Alcune volte, però, l'utente può darsi che si dimentichi di fare il logout chiudendo automaticamente il browser. Qualcuno saprebbe dirmi come si cattura l'evento della chiusura del browser?
    Grazie

  2. #2

  3. #3
    Utente di HTML.it L'avatar di bobc
    Registrato dal
    Feb 2004
    Messaggi
    245


    Dovrei provvedere ad una soluzione alternativa...
    Mi potreste dire se esiste qualche metodo che gestisca che sia trascorso un timeout di inattività dell'utente?
    (dovrei associare a quest'evento la rimozione dell'utente dalla tabella delle connessioni!)

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    imposta il timeout di sessione nel (mi sembra) web.xml

  5. #5
    Utente di HTML.it L'avatar di bobc
    Registrato dal
    Feb 2004
    Messaggi
    245
    A questo timeout da settare in web.xml è associato qualche metodo che permetta ad ogni timeout trascorso di effettuare un operazione legata ad esso?

  6. #6
    Utente di HTML.it L'avatar di bobc
    Registrato dal
    Feb 2004
    Messaggi
    245
    Dovrei rimuovere dei file temporanei legati a quella sessione anche!

  7. #7
    beh in realtà qualcosa potresti inventarti usando ajax e l'evento onUnLoad sul body del documento html,non so potrebbe essere un'idea...
    L'evento onUnload chiama una funzione javascript che effettua una get o una post verso una servlet che fa quello che vuoi

  8. #8
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    certo che sì
    se implementi HttpSessionListener e dichiari l'ascoltatore nel web.xml puoi eseguire un'azione nel metodo sessionDestroyed

  9. #9
    Utente di HTML.it L'avatar di bobc
    Registrato dal
    Feb 2004
    Messaggi
    245
    grazie, dovrò provare.
    Vi farò sapere ...

  10. #10
    Utente di HTML.it L'avatar di bobc
    Registrato dal
    Feb 2004
    Messaggi
    245
    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...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.