Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    258

    gestire la chiusura improvvisa del browser...

    Salve ragazzi,
    avrei un quesito da chiedervi.
    Sto realizzando un'applicazione in jsf,nel login l'utente si logga e automaticamente viene settata nel database una variabile Logged booleana che indica che l'utente è in navigazione.
    Nell'operazione di logout deve avvenire l'inverso e la variabile deve essere posta a false.
    Il problema è gestire la chiusura improvvisa del browser,ho letto che dovrei memorizzare l'istante della connessione e attivare un timer per stabilire che dopo tot secondi di inattività la variabile logged deve diventare false....
    non ho idea di come si possa fare,qualcuno può postarmi esempi o codice utile?
    Grazie mille

  2. #2
    la butto li, non so se e' fattibile, ovviamente ogni utente avra' un SessionID, potresti (credo sia fattibile) creare un listener sulla sessione in modo che quando questa venga distrutta la relativa riga nel db associata a quell'utente sia posta a false.

    Pero' e solo un idea neanche io attualmente saprei come realizzarla

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    62
    In effetti più che memorizzare lo stato della sessione con una variabile booleana dovresti memorizzare l'istante di tempo dell'ultima richiesta Tr e ricavare indirettamente lo stato della sessione in questo modo:

    Tempo Attuale-Tr < tot. secondi ---> utente loggato
    Tempo attuale-Tr >= tot.secondi ---> utente non loggato.

    Oppure come seconda soluzione memorizzi il SessionID e crei un Thread con scope Application che controlla periodicamente lo stato delle sessioni e provveda lui stesso ad aggiornare il campo booleano del database.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    258
    grazie Utopio,
    penso di voler seguire la tua prima soluzione...
    mi daresti dei consigli su come applicarla?
    Ho già creato una classe Visit che tiene conto della sessione dell'utente
    codice:
    public static User user;
    	private boolean loggedIn;
    	private List localeItems;
    	public static Connection conn;
    queste sono le variabili della classe.
    Devo aggiungere una variabile di tipo
    codice:
    Date dataLoggin
    che memorizza nella sessione l'istante di connessione e poi creo un listener?
    Con che funzione setto l'orario attuale?
    Dammi una mano se puoi,sono alle prime armi,grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    114
    scusa ma perchè devi usare il database per vedere se l'utente è loggato
    poi vedendo la classe
    public static User user;
    private boolean loggedIn;
    private List localeItems;
    public static Connection conn;
    vengono un po di brividi
    non penso tu abbia molta dimestichezza magari ti riesco a dare dei consigli utili
    non c'è modo di sapere se l'utente ha chiuso il browser, lavori sull'http che di natura non mantiene la sessione.
    C'è un metodo molto più veloce anzi direi "molto mejo!" per fare tutto ciò
    Innanzi tutto leva dal Database l'informazione se l'utente è loggato.
    Una classe statica Connection per l'accesso al Db direttamente nell'oggetto User non mi sembra inoltre una buona idea, mettila in un'altra classe di servizio per l'accesso al DB.
    quando un utente si Logga metti in sessione l'oggetto User che contiene tutti i dati dell'utente (nome, cognome.. quello che vuoi, magari non la password)

    ....qui metti la logica per l'accesso DB e verifica login
    ...
    .... se ok crea un nuovo oggetto User e mettici dentro le informazioni che tiri su dal DB
    User user = new User();
    user.setNome(....);
    user.setCognome(....);
    .....poi metti l'oggetto in sessione
    request.getSession().setAttribute("utente",user);

    ..la scadenza della sessione la programmi nel web.xml dopo un certo tempo di inattività scade
    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>

    questa scade dopo 30 minuti

    per l'accesso alle pagine Sicure accessibili cioè solo se l'utente è loggato non devi far altro che controllare se l'oggetto User è in sessione. così

    if (request.getSession().getAttribute("utente")!=null ) {
    .....utente loggato vai avanti alla risorsa protetta
    }
    else {
    ..vai alla pagina errore
    }

    spero di averti chiarito qualcosa.
    ho risposto a una tua domanda sul db sui gruppi google
    anche se nn le ho mai viste so che le jsf non sono semplicissime .. ti consiglierei di avvicinarti prima alle jsp e ai concetti fondamentali della programmazione web J2EE.
    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    258
    grazie mille per la risposta............
    ho sistemato un pò il codice dopo il tuo consiglio...
    vorrei chiederti una sola cosa,scusa la mia ignoranza.
    Nella mia funzione di loggin faccio l'autenticazione,una volta cha va a buon fine aggiungo alla fine del codice
    codice:
    User user=new User();
    user.setLogin(loginName);
    user.setTeamname(teamName;	
    user.setLoggedIn(true);
    Session session = (Session) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
    come memorizzo correttamente user in session?
    All'atto del login di un utente
    username=pippo;
    teamname=pippetto;

    come controllo che un utente con gli stessi dati non sia già in navigazione?
    Scusami se continuo a farti domande,ma grazie a te sto cominciando a capire...

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    114
    scusa ma che vuol dire
    come controllo che un utente con gli stessi dati non sia già in navigazione?
    le jsf non le ho mai usate non so che cosa faccia
    FacesContext.getCurrentInstance().getExternalConte xt().getSession(true);
    penso si riprenda solo la sessione ma booh. dal contesto delle faces prende l'istanza poi il contesto esterno e la session?!? nn so che logica c'è dietro.
    Come puoi fare te l'ho detto prima. Per vedere l'utente collegato basta che metti nella servlet
    User user = request.getSession().getAttribute("utente");
    se l'utente è loggato nell'istanza user ci sarà l'oggetto utente (User) con tutte le informazioni che lo identificano.
    se provi a fare un System.out vedi che ci sono le info per quell'utente.
    System.out.println(user.getNome());
    se non è loggato user sarà null.
    controllare se è null ti serve per dare o meno accesso alle risorse protette.
    un consiglio che posso darti è avvicinarti a queste tecnologie piano piano. partire subito con le jsf mi sembra troppo.. a quanto ne so come ti ho detto sono un po incasinate.
    comincia con le semplici jsp e le regole di base del J2ee. studiati ad esempio i filtri e i listener, il web.xml, le jstl e le jsp e le servlet. in questo modo ti fai un'idea molto di base sulla programmazione web.
    poi magari puoi passare a un framework per l'MVC2 tipo struts così da consolidare altri concetti e applicare meglio quello che hai fatto "a mano" fino ad ora. dipende da cosa devi fare ma questo mondo è vastissimo.
    Per esperienza la cosa migliore da fare è sapere cosa studiare e leggersi qualche libro. A forza di esempi è si più bello e divertente ma senza leggere qualcosa nn si va da nessuna parte.
    ciao

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.