Articoli

JSP Session, tutti i metodi dell’oggetto implicito Session

In un sito web, l’utente può effettuare diverse interazioni su diverse pagine del sito. Spesso è utile fare in modo che il sito personalizzi i dati in base a ciascun utente, in modo tale che l’utente possa avere un suo spazio personale, per le proprie attività specifiche in base ai propri interessi. Per far questo, JSP fornisce l’oggetto implicito di Sessione. In questo post vedremo metodi e concetti utili per creare e gestire una sessione usando JSP, e cioè JSP Session.

Cos’è una sessione

Una sessione può essere pensata come un oggetto associato a ciascun utente con un ID di sessione univoco e i dati dell’utente si basano sull’account registrato. Diverse forme di dati possono essere impostate in una sessione. Questi dati relativi a ciascun utente del sito, sono utili sia all’utente che al proprietario del sito web. HTTP è un protocollo stateless. Ogni volta che un utente visita una pagina Web, l’utente apre una connessione separata con il server Web e il server non tiene traccia delle precedenti richieste del client.

Esistono diversi approcci per mantenere una sessione tra client e server:

  • Cookie : i cookie sono file di testo che consentono ai programmatori di memorizzare alcune informazioni su un computer client e vengono conservati a scopo di tracciamento dell’utilizzo.
  • Passaggio dell’ID di sessione nell’URL : anche l’aggiunta e il passaggio dell’ID sessione all’URL è un modo per identificare una sessione. Questo metodo è obsoleto, e non sicuro perché è possibile monitorare l’URL.

JSP Session Implicit Object

Un oggetto sessione è l’oggetto implicito più comunemente utilizzato implementato per memorizzare i dati dell’utente per renderli disponibili su altre pagine JSP fino a quando la sessione dell’utente non è attiva.

L’oggetto implicito della sessione è un’istanza di un’interfaccia javax.servlet.http.HttpSession .

Questo oggetto sessione ha diversi metodi di sessione per gestire i dati nell’ambito della sessione.

Vediamo qui di seguito un esempio di una richiesta JSP e di oggetti impliciti di sessione in cui un utente invia le informazioni di accesso e un’altra pagina JSP le riceve per l’elaborazione, iniziamo dalla pagina HTML che attiverà l’action sul server:

Articoli correlati
Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.
<!DOCTYPE html>
<html>
    <head>
        <title>User login form</title>
    </head>
    <body>
        <form action="login.jsp">
            Username: <input type="text" name="user_name" /> <br />
            <input type="submit" value="Submit" />
        </form>
    </body>
</html>

Di seguito il file login.jsp che viene attivato dalla action dell’HTML, che prima di fare la redirect su home.jsp, imposta una variabile di sessione user:name

<%@ page import = " java.util.* " %>
<% 
String username = request.getParameter("user_name"); 
if(username.equals("admin")){

    // session variable user_name
    session.setAttribute("user_name",username); 
    response.sendRedirect("home.jsp"); 
}else{
    out.print("Invalid Username");  
}
%>

Di seguito il file home.jsp, invocato dopo l’impostazione della variabile di sessione, il file legge il contenuto della variabile di sessione tramite il metodo “getAttribute”

<%
String session_user_name = (String)session.getAttribute("user_name");
out.print("Hi " + session_user_name);
%>
Metodo di Session Implicit Object
  1. public Object getAttribute(String name) : viene utilizzato per restituire l’oggetto associato al nome specificato per una sessione e null se non è presente alcun oggetto.
  2. public Enumeration getAttributeNames() : viene utilizzato per restituire un’enumerazione di oggetti String che conterrà i nomi di tutti gli oggetti di questa sessione.
  3. public long getCreationTime() : viene utilizzato per restituire l’ora in cui la sessione è stata creata a partire dalla mezzanotte del 1 gennaio 1970, GMT.
  4. public String getId() : viene utilizzato per restituire una stringa che conterrà un identificatore univoco assegnato alla sessione.
  5. public long getLastAccessedTime() : viene utilizzato per restituire l’ultima volta che il tuo client ha inviato una richiesta collegata alla sessione.
  6. public int getMaxInactiveInterval() : viene utilizzato per restituire l’intervallo di tempo più alto (in secondi), che deve essere mantenuto dal contenitore servlet quando viene aperta una sessione tra gli accessi client.
  7. public void invalidate() : viene utilizzato per invalidare una sessione e slegare i suoi oggetti ad essa associati.
  8. public boolean isNew() : viene utilizzato per restituire un true quando il client non sa nulla della sessione o quando il client sceglie di non partecipare alla sessione.
  9. public void removeAttribute(String name) : viene utilizzato per rimuovere l’oggetto associato in modo specifico a una sessione.
  10. public void setAttribute(String name, Object value) : viene utilizzato per associare un oggetto alla sessione con l’aiuto di un nome specificato.
  11. public void setMaxInactiveInterval(int interval) : viene utilizzato per specificare il tempo (in secondi) tra le richieste client in cui il contenitore servlet annullerà questa sessione.
Esempio di Session tracking

Vediamo ora come usare l’oggetto HttpSession per scoprire l’ora di creazione e l’ora dell’ultimo accesso per una sessione. Associamo una nuova sessione alla richiesta se non ne esiste già una.

<%@ page import = "java.io.*,java.util.*" %>
<%
   // Get session creation time.
   Date createTime = new Date(session.getCreationTime());
   
   // Get last access time of this Webpage.
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "Welcome Back to my website";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("BlogInnovazione.it");

   // Check if this is new comer on your Webpage.
   if (session.isNew() ){
      title = "Welcome to my website";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } 
   visitCount = (Integer)session.getAttribute(visitCountKey);
   visitCount = visitCount + 1;
   userID = (String)session.getAttribute(userIDKey);
   session.setAttribute(visitCountKey,  visitCount);
%>

<html>
   <head>
      <title>Session Tracking</title>
   </head>
   
   <body>
      <center>
         <h1>Session Tracking</h1>
      </center>
      
      <table border = "1" align = "center"> 
         <tr bgcolor = "#949494">
            <th>Session info</th>
            <th>Value</th>
         </tr> 
         <tr>
            <td>id</td>
            <td><% out.print( session.getId()); %></td>
         </tr> 
         <tr>
            <td>Creation Time</td>
            <td><% out.print(createTime); %></td>
         </tr> 
         <tr>
            <td>Time of Last Access</td>
            <td><% out.print(lastAccessTime); %></td>
         </tr> 
         <tr>
            <td>User ID</td>
            <td><% out.print(userID); %></td>
         </tr> 
         <tr>
            <td>Number of visits</td>
            <td><% out.print(visitCount); %></td>
         </tr> 
      </table> 
   
   </body>
</html>

Posizionando il codice jsp su server, ed eseguendo il jsp, avremo un risultato di questo tipo

Riattivando il codice jsp, noteremo che il numero di visite si incrementa, perchè viene riconosciuta la sessione.

Eliminazione dei dati di sessione

Dopo aver aperto e gestito una sessione, possiamo eseguire diverse operazioni sulla sessione:

  • Rimuovere un particolare attributo: è possibile chiamare il metodo public void removeAttribute(String name) per eliminare il valore associato a una chiave particolare;
  • Elimina l’intera sessione: puoi chiamare il metodo public void invalidate() per eliminare un’intera sessione;
  • Impostazione del timeout della sessione: è possibile chiamare il metodo public void setMaxInactiveInterval(int interval) per impostare il timeout per una sessione individualmente;
  • Disconnettere l’utente: è possibile chiamare il logout per disconnettere il client dal server Web e invalidare tutte le sessioni appartenenti a tutti gli utenti.

Ercole Palmeri

Newsletter sull’Innovazione
Non perderti le notizie più importanti sull'Innovazione. Iscriviti per riceverle via e-mail.

Articoli recenti

Nasce Nim, l’Osservatorio del Nord-Est sull’economia dell’innovazione

Nasce l’Osservatorio del Nordest sull’economia dell’Innovazione Nim, (Numbers Innovation Motion) è un progetto di Galileo Visionary District realizzato in collaborazione…

7 Dicembre 2023

Innovazione del Content Marketing con Memory e Personality

ASKtoAI lancia le innovative funzionalità Memory e Personality, strumenti d'avanguardia per la creazione di contenuti digitali che promettono di migliorare…

6 Dicembre 2023

Discuss apre una nuova era di ricerca qualitativa con GenAI ampliata e innovazione asincrona

Discuss , la piattaforma leader appositamente creata per trasformare le esperienze in insight, ha potenziato le sue capacità di scalare la…

6 Dicembre 2023

Unwrapping Innovation: Blue Lake Packaging annuncia un’alternativa a base di fibra e priva di plastica al nastro e ai dispenser tradizionali

Con le festività che si avvicinano rapidamente, Blue Lake Packaging è entusiasta di offrire un'alternativa ecologica al nastro da imballaggio…

6 Dicembre 2023

Riepilogo del Netlogistik Innovation Day: trasformazione digitale della catena del freddo, innovazioni nel riciclaggio e leadership nella supply chain

Netlogistik , leader in potenti servizi che guidano le aziende verso la trasformazione digitale della catena di fornitura, ha recentemente tenuto…

6 Dicembre 2023

Lattice collabora con NVIDIA per accelerare l’IA edge

Annuncia una soluzione integrata che combina FPGA di Lattice a bassa potenza e bassa latenza con la piattaforma NVIDIA Orin…

6 Dicembre 2023

Evoluzione del tessile: il progetto TEPP della Taiwan Textile Federation ispira l’innovazione sostenibile oltre il 2023

Con un successo clamoroso, il Textile Export Promotion Project (TEPP), guidato dalla Taiwan Textile Federation nel 2023, ha messo in…

5 Dicembre 2023

Lattice continua la rapida espansione del portafoglio di prodotti che rende possibile la prossima era dell’innovazione

Lattice presenta i nuovi FPGA mid-range Lattice Avant-G e Lattice Avant-X, stack di soluzioni specifiche per le applicazioni ampliate e…

5 Dicembre 2023

Scopri di più sulla gestione della conoscenza e sull’innovazione per gli studi legali con un nuovo trattato scritto da esperti

Innovazione per i professionisti della gestione della conoscenza e dell'innovazione (KM&I). Nel settore legale è ora disponibile un riferimento completo…

5 Dicembre 2023

La Fondazione Eclipse lancia il gruppo di lavoro Eclipse Dataspace per promuovere l’innovazione globale nella condivisione affidabile dei dati

La Eclipse Foundation , una delle più grandi fondazioni di software open source al mondo, ha annunciato oggi la formazione dell'Eclipse…

5 Dicembre 2023