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:

User login form

Username:

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

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"

Metodo di Session Implicit Object

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

- public Enumeration getAttributeNames() : viene utilizzato per restituire un'enumerazione di oggetti String che conterrà i nomi di tutti gli oggetti di questa sessione.

- public long getCreationTime() : viene utilizzato per restituire l'ora in cui la sessione è stata creata a partire dalla mezzanotte del 1 gennaio 1970, GMT.

- public String getId() : viene utilizzato per restituire una stringa che conterrà un identificatore univoco assegnato alla sessione.

- public long getLastAccessedTime() : viene utilizzato per restituire l'ultima volta che il tuo client ha inviato una richiesta collegata alla sessione.

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

- public void invalidate() : viene utilizzato per invalidare una sessione e slegare i suoi oggetti ad essa associati.

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

- public void removeAttribute(String name) : viene utilizzato per rimuovere l'oggetto associato in modo specifico a una sessione.

- public void setAttribute(String name, Object value) : viene utilizzato per associare un oggetto alla sessione con l'aiuto di un nome specificato.

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

Session Tracking

Session Tracking

Session info
Value

id

Creation Time

Time of Last Access

User ID

Number of visits

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
Ercole Palmeri
#JSP #SoftwareDeveloper #softwaredevelopment #SoftwareEngineering #SoftwareTesting
https://bloginnovazione.it/jsp-session/28737/

Commenti

Post popolari in questo blog

Esercizi Java per corso di formazione Java Base

Forescout si unisce a MISA e annuncia l'integrazione con Microsoft Sentinel per fornire servizi automatizzati di gestione delle minacce informatiche su tutte le infrastrutture aziendali