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:

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

Come usare le visualizzazioni e il layout in PowerPoint

Microsoft PowerPoint fornisce diversi tipi di strumenti per rendere le presentazioni fruibili, interattive e adatte a diversi scopi. Gli strumenti…

20 Maggio 2024

Apprendimento automatico: confronto tra Random Forest e albero decisionale

Nel mondo del machine learning, sia gli algoritmi random forest che decision tree svolgono un ruolo fondamentale nella categorizzazione e…

17 Maggio 2024

Come migliorare le presentazioni Power Point, consigli utili

Esistono molti suggerimenti e trucchi per fare ottime presentazioni. L'obiettivo di queste regola è di migliorare l'efficacia, la scorrevolezza di…

16 Maggio 2024

È ancora la velocità la leva nello sviluppo dei prodotti, secondo il report di Protolabs

Pubblicato il rapporto "Protolabs Product Development Outlook". Esamina le modalità in cui oggi vengono portati i nuovi prodotti sul mercato.…

16 Maggio 2024

I quattro pilastri della Sostenibilità

Il termine sostenibilità è oramai molto usato per indicare programmi, iniziative e azioni finalizzate alla preservazione di una particolare risorsa.…

15 Maggio 2024

Come consolidare i dati in Excel

Una qualsiasi operazione aziendale produce moltissimi dati, anche in forme diverse. Inserire manualmente questi dati da un foglio Excel a…

14 Maggio 2024

Analisi trimestrale Cisco Talos: mail aziendali nel mirino dei criminali Manifatturiero, Istruzione e Sanità i settori più colpiti

La compromissione delle mail aziendali sono aumentate nei primi tre mesi del 2024 più del doppio rispetto all’ultimo trimestre del…

14 Maggio 2024

Principio di segregazione dell’interfaccia (ISP), quarto principio S.O.L.I.D.

Il principio di segregazione dell'interfaccia è uno dei cinque principi SOLID della progettazione orientata agli oggetti. Una classe dovrebbe avere…

14 Maggio 2024

Leggi Innovazione nella tua Lingua

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

Seguici