Visualizzazione dei risultati da 1 a 8 su 8

Discussione: HttpSession

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    181

    HttpSession

    Ciao a tutti, ho una piccola domanda. Ho una lista di sessioni, ovviamente ogni sessione ha un id...è possibile recuperare una determinata sessione conoscendo l'id?

    Dovrei fare tipo
    Codice PHP:
    HttpSession session ses.getValue("idDiUnaSessione"); ? 
    Avevo pensato ad un'altra soluzione, per esempio un utente esegue la login, al session.setAttribute passavo l'id della sessione, in modo tale che ogni utente aveva una sessione di nome diverso, ma credo che poi facendo getAttribute("idDiUnaSessione"), mi ritorni null, xchè si basa sulla sessione del mio contesto, o mi sbaglio?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Per poter effettuare una cosa del genere (anche se, davvero, mi riesce difficile coglierne l'utilità in questo momento, se non per scopi di manutenzione) è necessario operare in modo diverso.

    Devi creare una mappa (va benissimo HashMap), da memorizzare come attributo del ServletContext (lo potresti fare all'inizializzazione del ServletContext stesso, creando l'apposito ServletContextListener).

    codice:
    public void contextInitialized(ServletContextEvent sce) {
       HashMap<String,HttpSession> sessioni = new HashMap<String,HttpSession>();
       cse.getServletContext().setAttribute("sessioni", sessioni);
    }
    Successivamente, alla creazione di una sessione (anche questo rintracciabile tramite l'apposito HttpSessionListener) recupererai l'ID della sessione appena creata e lo userai come chiave nella HashMap, dove inserirai l'oggetto HttpSession:

    codice:
    public void sessionCreated(HttpSessionEvent hse) {
       String idSessione = hse.getSession().getId();
       HashMap<String,HttpSession> sessioni = (HashMap<String,HttpSession>) hse.getSession().getServletContext().getAttribute("sessioni");
       sessioni.put(idSessione, hse.getSession());
    }
    A questo punto, ovunque tu voglia accedere alle altre sessioni, passerai per il ServletContext, recupererai l'attributi "sessioni" (che è la tua mappa) e otterrai la specifica sessione accedendo alla mappa con la chiave apposita (che sarà l'id della sessione da recuperare).

    E' un "lavoraccio", ma del resto non capisco a cosa ti possa servire accedere alle sessioni altrui...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    181
    rispondo dopo tantissimo tempo il discorso del servlet context come devo fare?cioè l'utente che si logga viene captato alla login, quindi devo fare una servlet che viene chiamata ancor prima della login...?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Sasuccio87
    rispondo dopo tantissimo tempo il discorso del servlet context come devo fare?cioè l'utente che si logga viene captato alla login, quindi devo fare una servlet che viene chiamata ancor prima della login...?
    Il ServletContextListener è un listener che viene attivato automaticamente dal server all'avvio dell'applicazione (prima che qualunque utente ci possa accedere). Lì dovrai creare la struttura dati che conterrà le "future" sessioni degli utenti e inserire questa struttura nel ServletContext (che è un oggetto che esiste a prescindere dagli utenti, serve a mantenere in piedi l'applicazione).

    Poi, il SessionListener viene attivato automaticamente ogni volta che viene creata una nuova sessione (dove tu crei la sessione io non lo so... la crei appena un utente entra nel sito? La crei solo DOPO che l'utente ha fatto la login? Boh, non è un dettaglio di interesse cruciale... tu sai che nel momento in cui viene creata la sessione per un utente, viene invocato l'HttpSessionListener.

    Quindi, non ti serve proprio alcuna servlet...

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    181
    thanks

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    181
    Però non capisco una cosa...poi questa hashmap che ho messo in session come la recupero nelle altre action? Se faccio getAttribute mi ritorna null -_-

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    181
    Risolto risolto^^ facevo getAttribute senza fare getServletContext.getAttribute...grazie mille lele

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Sasuccio87
    Risolto risolto^^ facevo getAttribute senza fare getServletContext.getAttribute...grazie mille lele
    Sì, infatti quella HashMap non è in sessione (altrimenti sarebbe "di proprietà" di un singolo utente), ma nel ServletContext (che è uno unico per tutta l'applicazione).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.