Pagina 1 di 7 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 61

Discussione: HttpSessionListener

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    80

    HttpSessionListener

    Ho una piccola domanda sulle Sessioni. Nel mio file web.xml ho inserito il Listener, poi mi sono creato una classe java che implementa HttpSessionListener , automaticamente importo i metodi sessionDestroyed e sessionCreated. Nel secondo caso faccio incrementare di 1 una variabile, nel secondo caso diminuisco di 1 la variabile e poi attraverso un metodo intero mi faccio tornare il valore della variabile dichiarata. Questo conteggio funziona correttamente, ma se volessi effettuare questo controllo delle sessioni attiva soltanto se viene eseguito un Login?

    Avevo pensato che non appena un utente esegue il login, chiama la classe che implementa HttpSessionListener e così il problema era risolto, ma poi ho visto che inserendo :


    Codice PHP:
    <listener>
    <
    listener-class> web.SessionCounter </listener-class>
    </
    listener
    al caricamento del progetto viene chiamata la pagina...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: HttpSessionListener

    Originariamente inviato da Shakashi
    ma se volessi effettuare questo controllo delle sessioni attiva soltanto se viene eseguito un Login?
    In pratica vuoi tenere il conteggio degli utenti "loggati".

    Il "essere loggati" è una cosa che puoi controllare tu. Tipicamente l'utente compila un form (nome/password), lo invia ad un URL, la risorsa (tipicamente Servlet) effettua l'autenticazione e se ok tipicamente mette un attributo in sessione che dice "sono loggato". Quindi il punto dove puoi incrementare il contatore.... è qui.

    Ma quando l'utente "esce"??? Beh le strade sono 2: l'utente clicca su un link o pulsante "esci" (o simile) tale per cui viene fatto direttamente qualcosa magari per invalidare la sessione. Oppure l'utente si dimentica di uscire correttamente e la sessione "scade" (per timeout).
    Entrambi i casi potresti gestirli nel sessionDestroyed(). Se la sessione era per un utente "loggato" e viene distrutta (perché l'hai invalidata esplicitamente tu o perchè è scaduta al timeout) allora decrementi quel contatore.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    80
    Si ma il mio problema è questo, quando mappo nel file xml la classe listener, automaticamente il metodo sessionCreated, crea una sessione, io invece, vorrei che la creasse soltanto se l'utente inserisce nome e pass

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Shakashi
    quando mappo nel file xml la classe listener, automaticamente il metodo sessionCreated, crea una sessione
    No, non è di certo il listener che "crea" una sessione!! Riceve solo la notifica che una sessione è stata creata. E quindi bisogna solo vedere che cosa hai richiesto al container. Forse una pagina JSP (ad esempio quella con il form di login ....)??? Per default l'uso delle sessioni è true nelle pagine JSP se non si mette session="false" nella direttiva page.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    80
    Aaa ho capito, quindi mi toccherebbe una volta che l'utente esegue il login chiamare il metodo sessionCreated della classe che implementa HttpSessionListener?E una volta chiamato allora incremento il valore...giusto?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Shakashi
    Aaa ho capito, quindi mi toccherebbe una volta che l'utente esegue il login chiamare il metodo sessionCreated della classe che implementa HttpSessionListener?
    NO, non sei tu che devi invocare i metodi del listener!!!!

    Hai una pagina con un form di login? Avrà una certa 'action'? Va a finire ad esempio ad una Servlet? Dove si suppone che venga fatta l'autenticazione. L'utente è autenticato? Bene, tu da codice crei una nuova sessione (o semplicemente ne aggiorni lo stato se ce n'era già una) e imposti un "attributo" che dice "utente loggato".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    80
    Ah, ok. Allora nel file web.xml ho praticamente inserito la classe listener. Dopo di che ho creato un modulo html, inserisci username e password, se l'utente è presente nel db assegno una sessione per esempio:

    Codice PHP:
    HttpSession sessioneUtente request.getSession(true);
    sessioneUtente.setAttribute("utente_loggato"nickname); 
    Automaticamente facendo così avviene la chiamata al metodo sessionCreated?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Shakashi
    Codice PHP:
    HttpSession sessioneUtente request.getSession(true);
    sessioneUtente.setAttribute("utente_loggato"nickname); 
    Automaticamente facendo così avviene la chiamata al metodo sessionCreated?
    Così sì. Però quando sessionCreated viene invocato dal container non c'è ancora quell'attributo!

    Se vuoi puoi ricevere notifica del binding/unbinding degli attributi ... è un altro listener: HttpSessionBindingListener. E a pensarci bene potrebbe anche essere una soluzione migliore. Quando "senti" che l'attributo "utente_loggato" è "bound" incrementi. Quando viene "unbound" decrementi.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    80
    Scusa se rompo, però non ho ben capito una cosa. Il sessionCreated, viene invocato ogni volta che creo una sessione? Quindi dovrei incrementare non nella classe che implementa HttpSessionListener, ma nella classe in cui eseguo il login giusto? Perchè se inserissi l'incremento nella Listener, lui incrementerebbe ad ogni session che viene creata. Quindi se magari oltre a mettere l'utente in sessione, metto in sessione altro e quindi creo un'altra sessione, automaticamente il metodo sessionCreated verrebbe chiamato giusto?

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Shakashi
    Il sessionCreated, viene invocato ogni volta che creo una sessione?
    Sì.

    Originariamente inviato da Shakashi
    Quindi dovrei incrementare non nella classe che implementa HttpSessionListener, ma nella classe in cui eseguo il login giusto?
    Questo è un approccio, visto che il punto in cui "sai" che un utente si è loggato è ben preciso e sotto il tuo controllo.

    Originariamente inviato da Shakashi
    Perchè se inserissi l'incremento nella Listener, lui incrementerebbe ad ogni session che viene creata. Quindi se magari oltre a mettere l'utente in sessione, metto in sessione altro e quindi creo un'altra sessione
    No alt. Di sessione ce n'è 1 sola. Puoi mettere più attributi in sessione .... ma non è una nuova sessione!


    P.S. mi sono confuso, l'altro listener che potrebbe interessarti è HttpSessionAttributeListener, non HttpSessionBindingListener.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.