Cookie Java: come eseguire la gestione della sessione del servlet Java utilizzando i cookie
Pubblicato: 2020-08-19
Le pagine web non hanno ricordi. Un utente che va da una pagina all'altra sarà trattato dal sito come un visitatore completamente nuovo. I cookie di sessione consentono al sito Web che stai visitando di tenere traccia dei tuoi movimenti da una pagina all'altra in modo che non ti vengano richieste le stesse informazioni che hai già fornito al sito.
I cookie ti consentono di procedere attraverso molte pagine di un sito in modo rapido e semplice senza dover autenticare o rielaborare ogni nuova area che visiti.
Ma a volte nelle applicazioni Web Java, dovremmo sapere chi è il client ed elaborare la richiesta di conseguenza.
Ad esempio, un'applicazione per il carrello degli acquisti dovrebbe sapere chi sta inviando la richiesta di aggiungere un articolo e in quale carrello l'articolo deve essere aggiunto o chi sta inviando la richiesta di pagamento in modo da poter addebitare l'importo al cliente corretto.
La sessione è uno stato di conversazione tra client e server e può consistere in più richieste e risposte tra client e server. Poiché HTTP e Web Server sono entrambi stateless, l'unico modo per mantenere una sessione è quando alcune informazioni univoche sulla sessione (ID sessione) vengono passate tra server e client in ogni richiesta e risposta.

Ora creiamo un progetto Web dinamico semplice in Eclipse che spiega la gestione della sessione servlet Java utilizzando i cookie.
Ecco i passaggi:
- Crea un progetto Web dinamico:
CrunchifySessionManagementByCookie
-
crunchify-login.html
: crea la pagina di benvenuto di un'applicazione -
CrunchifyLoginServlet.java
– Si occupa della richiesta di accesso -
CrunchifyLogoutServlet.java
– Si occupa della richiesta di logout -
web.xml
– File descrittore di distribuzione (non vedi web.xml? Segui questo tutorial) -
CrunchifyLoginSuccessful.jsp
– La richiesta di successo viene inoltrata aLoginSuccess.jsp
, questo cookie verrà utilizzato lì per tracciare la sessione. Si noti inoltre che il timeout dei cookie è impostato su 60 minuti.

Un altro deve leggere:
- Esempio/Tutorial Spring MVC: Hello World – Spring MVC 3.2.1
- Come aggiornare il grafico Sparkline ogni 3 secondi in Spring MVC (aggiornamento in tempo reale)
1. crunchify-login.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
< ! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > < html > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=US-ASCII" > < title > Crunchify Login Form - Session Management by Cookies < / title > <style type ="text/css"> body { background-image : url ( 'https://cdn.crunchify.com/bg.png' ) ; } </style> < / head > < body > < div align = "center" > < br > < br > < form action = "CrunchifyLoginServlet" method = "post" > Enter Your Username : < input type = "text" name = "crunchifyUser" > < br > Enter Your Password : < input type = "password" name = "crunchifyPassword" > < br > < br > < br > < input type = "submit" value = "Login" > < / form > < / div > < / body > < / html > |
2. CrunchifyLoginServlet.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
package com . crunchify . tutorials ; import java . io . IOException ; import java . io . PrintWriter ; import javax . servlet . RequestDispatcher ; import javax . servlet . ServletException ; import javax . servlet . annotation . WebServlet ; import javax . servlet . http . Cookie ; import javax . servlet . http . HttpServlet ; import javax . servlet . http . HttpServletRequest ; import javax . servlet . http . HttpServletResponse ; /* * Author: Crunchify.com * */ /** * Servlet implementation class LoginServlet */ @WebServlet ( "/CrunchifyLoginServlet" ) public class CrunchifyLoginServlet extends HttpServlet { private static final long serialVersionUID = 1L ; private final String userID = "CrunchifyUser" ; private final String password = "CrunchifyPassword" ; protected void doPost ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { // get request parameters for userID and password String crunchifyUser = request . getParameter ( "crunchifyUser" ) ; String pwd = request . getParameter ( "crunchifyPassword" ) ; if ( userID . equals ( crunchifyUser ) && password.equals(pwd)) { Cookie crunchifyCookie = new Cookie("crunchifyUser", crunchifyUser); // setting cookie to expiry in 60 mins crunchifyCookie . setMaxAge ( 60 * 60 ) ; response . addCookie ( crunchifyCookie ) ; response . sendRedirect ( "CrunchifyLoginSuccess.jsp" ) ; } else { RequestDispatcher rd = getServletContext ( ) . getRequestDispatcher ( "/crunchify-login.html" ) ; PrintWriter out = response . getWriter ( ) ; out . println ( "<font color=red>Please make sure you enter UserID/Pass as \"CrunchifyUser : CrunchifyPassword\".</font>\n" ) ; rd . include ( request , response ) ; } } } |
3. CrunchifyLogoutServlet.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
package com . crunchify . tutorials ; import java . io . IOException ; import javax . servlet . ServletException ; import javax . servlet . annotation . WebServlet ; import javax . servlet . http . Cookie ; import javax . servlet . http . HttpServlet ; import javax . servlet . http . HttpServletRequest ; import javax . servlet . http . HttpServletResponse ; /* * Author: Crunchify.com * */ /** * Servlet implementation class LogoutServlet */ @WebServlet ( "/CrunchifyLogoutServlet" ) public class CrunchifyLogoutServlet extends HttpServlet { private static final long serialVersionUID = 1L ; protected void doPost ( HttpServletRequest request , HttpServletResponse response ) throws ServletException , IOException { response . setContentType ( "text/html" ) ; Cookie loginCookie = null ; Cookie [ ] cookies = request . getCookies ( ) ; if ( cookies ! = null ) { for ( Cookie cookie : cookies ) { if ( cookie . getName ( ) . equals ( "crunchifyUser" ) ) { loginCookie = cookie ; break ; } } } if ( loginCookie ! = null ) { loginCookie . setMaxAge ( 0 ) ; response . addCookie ( loginCookie ) ; } response . sendRedirect ( "crunchify-login.html" ) ; } } |
4. web.xml
1 2 3 4 5 6 7 8 9 10 |
<? xml version = "1.0" encoding = "UTF-8" ?> < web - app xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xsi : schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id = "WebApp_ID" version = "3.0" > < display - name > CrunchifySessionManagementByCookie < / display - name > < welcome - file - list > < welcome - file > crunchify - login . html < / welcome - file > < / welcome - file - list > < / web - app > |
5. CrunchifyLoginSuccessful.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<% @ page language = "java" contentType = "text/html; charset=US-ASCII" pageEncoding = "US-ASCII" %> < ! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > < html > < head > < meta http - equiv = "Content-Type" content = "text/html; charset=US-ASCII" > < title > Crunchify - Login Successful - Session management by Cookies < / title > <style type ="text/css"> body { background-image : url ( 'https://cdn.crunchify.com/bg.png' ) ; } </style> < / head > < body > < div align = "center" > < br > < br > <% String userName = null ; Cookie [ ] cookies = request . getCookies ( ) ; if ( cookies ! = null ) { for ( Cookie cookie : cookies ) { if ( cookie . getName ( ) . equals ( "crunchifyUser" ) ) userName = cookie . getValue ( ) ; } } if ( userName == null ) response . sendRedirect ( "crunchify-login.html" ) ; %> < h3 > Hi <%= userName %> , Login successful . < / h3 > < br > < form action = "CrunchifyLogoutServlet" method = "post" > < input type = "submit" value = "Logout" > < / form > < / div > < / body > < / html > |
Ora eseguiamo questo esempio:
- Distribuisci il progetto
CrunchifySessionManagementByCookie
su Tomcat ed esegui Tomcat.

- Punta l'URL del tuo browser su http://localhost:8080/CrunchifySessionManagementByCookie/crunchify-login.html

- Pagina di successo

- Pagina di accesso non riuscita

Ora come verificare se il tuo cookie è impostato correttamente.

Prova a scaricare qualsiasi Cookie Manager Extension
e dovresti vedere Cookie
nel tuo browser come mostrato di seguito.

Fammi sapere se riscontri problemi con l'esecuzione al di sopra del codice di gestione dei cookie servlet.