Pliki cookie Java: Jak zarządzać sesjami serwletów Java za pomocą plików cookie?
Opublikowany: 2020-08-19
Strony internetowe nie mają pamięci. Użytkownik przechodzący ze strony na stronę będzie traktowany przez serwis jako zupełnie nowy gość. Sesyjne pliki cookie umożliwiają odwiedzanej stronie internetowej śledzenie Twojego ruchu ze strony na stronę, dzięki czemu nie zostaniesz poproszony o te same informacje, które już podałeś w witrynie.
Pliki cookie umożliwiają szybkie i łatwe przeglądanie wielu stron witryny bez konieczności uwierzytelniania lub ponownego przetwarzania każdego nowego odwiedzanego obszaru.
Ale czasami w aplikacjach internetowych Java powinniśmy wiedzieć, kim jest klient i odpowiednio przetworzyć żądanie.
Na przykład aplikacja koszyka na zakupy powinna wiedzieć, kto wysyła żądanie dodania przedmiotu i do którego koszyka należy dodać przedmiot lub kto wysyła żądanie kasy, aby mogła obciążyć odpowiednią kwotą klienta.
Sesja jest stanem konwersacyjnym między klientem a serwerem i może składać się z wielu żądań i odpowiedzi między klientem a serwerem. Ponieważ zarówno HTTP, jak i serwer sieci Web są bezstanowe, jedynym sposobem utrzymania sesji jest przekazanie pewnych unikalnych informacji o sesji (identyfikator sesji) między serwerem a klientem w każdym żądaniu i odpowiedzi.

Teraz stwórzmy prosty dynamiczny projekt internetowy w środowisku Eclipse, który wyjaśnia zarządzanie sesjami serwletów Java przy użyciu plików cookie.
Oto kroki:
- Utwórz dynamiczny projekt internetowy:
CrunchifySessionManagementByCookie
-
crunchify-login.html
: Utwórz stronę powitalną aplikacji -
CrunchifyLoginServlet.java
– To zajmuje się żądaniem logowania -
CrunchifyLogoutServlet.java
– To zajmuje się żądaniem wylogowania -
web.xml
— plik deskryptora wdrożenia (Nie widzisz pliku web.xml? Postępuj zgodnie z tym samouczkiem) -
CrunchifyLoginSuccessful.jsp
— żądanie sukcesu jest przekazywane doLoginSuccess.jsp
, ten plik cookie będzie tam używany do śledzenia sesji. Zauważ również, że limit czasu pliku cookie jest ustawiony na 60 minut.

Inny musi przeczytać:
- Przykład / samouczek Spring MVC: Hello World – Spring MVC 3.2.1
- Jak aktualizować wykres Sparkline co 3 sekundy w wiosennym MVC (aktualizacja w czasie rzeczywistym)
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 > |
Przeanalizujmy teraz ten przykład:
- Wdróż projekt
CrunchifySessionManagementByCookie
w Tomcat i uruchom Tomcat.

- Wskaż adres URL przeglądarki na http://localhost:8080/CrunchifySessionManagementByCookie/crunchify-login.html

- Strona sukcesu

- Nieudana strona logowania

Teraz jak sprawdzić, czy plik cookie jest prawidłowo ustawiony.

Spróbuj pobrać dowolne Cookie Manager Extension
i powinieneś zobaczyć plik Cookie
w przeglądarce, jak pokazano poniżej.

Daj mi znać, jeśli napotkasz problem z działaniem powyżej kodu zarządzania plikami cookie Servlet.