JSP Session, tutti i metodi dell’oggetto implicito Session

  • Tags:
Java Server Page Tutorial
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:

<!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

JSP Session tracking

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

JSP Session, tutti i metodi dell&#8217;oggetto implicito Session

Newsletter sull’Innovazione

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

Puoi cancellarti in ogni momento. Leggi la nostra Privacy Policy.

goovis
Articoli
Idea Brillante GOOVIS Lite: il Cinema in 3D personale e su schermo gigante

GOOVIS Lite, un’idea brillante da un team con una grande competenza nella visualizzazione delle informazioni, nell’ottica delle immagini visive e sulle cuffie AR/VR/MR. GOOVIS Lite: nitidezza delle immagini con 53 PPD (pixel per grado), il numero più alto del settore. Con un peso di soli 7,5 once, GOOVIS Lite è …

Leonardo e Khalifa University lanciano una Cyber Security Academy in UAE
Articoli
Leonardo e Khalifa University lanciano una Cyber Security Academy in UAE

L’azienda italiana e Khalifa University insieme per stabilire ad Abu Dhabi una cyber academy, scuola di alta formazione per la sicurezza informatica Con sede presso la Khalifa University of Science and Technology, la nuova Academy farà leva su competenze e tecnologie di Leonardo per la protezione degli ecosistemi digitali, nonché …

analisi predittiva
Articoli
Cos’è l’Analisi predittiva, e perché è importante negli affari

L’analisi predittiva è necessaria per comprendere il mondo naturale e fare previsioni accurate su di esso. È un approccio basato sui dati che studia come un’azienda e il suo ambiente interagiscono come un sistema. E come può influenzare l’ambiente circostante per raggiungere gli obiettivi prefissati.  Esistono chiari parallelismi tra il modo in …