JSP - obsługa plików cookie

W tym rozdziale omówimy obsługę plików cookie w JSP. Pliki cookie to pliki tekstowe przechowywane na komputerze klienta i przechowywane w celu śledzenia różnych informacji. JSP w przejrzysty sposób obsługuje pliki cookie HTTP przy użyciu podstawowej technologii serwletów.

Identyfikowanie i zwracanie użytkowników obejmuje trzy kroki -

  • Skrypt serwera wysyła zestaw plików cookie do przeglądarki. Na przykład imię i nazwisko, wiek lub numer identyfikacyjny itp.

  • Przeglądarka przechowuje te informacje na komputerze lokalnym do wykorzystania w przyszłości.

  • Kiedy następnym razem przeglądarka wysyła jakiekolwiek żądanie do serwera internetowego, wysyła te informacje o plikach cookie do serwera, a serwer wykorzystuje te informacje do identyfikacji użytkownika lub może również służyć do innych celów.

W tym rozdziale dowiesz się, jak ustawić lub zresetować pliki cookie, jak uzyskać do nich dostęp i jak je usunąć za pomocą programów JSP.

Anatomia pliku cookie

Pliki cookie są zwykle umieszczane w nagłówku HTTP (chociaż JavaScript może również ustawić plik cookie bezpośrednio w przeglądarce). Strona JSP, która ustawia plik cookie, może wysyłać nagłówki wyglądające mniej więcej tak:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT; 
   path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html

Jak widać, plik Set-Cookie header zawiera a name value pair, a GMT date, a path i a domain. Nazwa i wartość będą zakodowane w postaci adresu URL. Plikexpires pole jest instrukcją dla przeglądarki "forget" plik cookie po określonej godzinie i dacie.

Jeśli przeglądarka jest skonfigurowana do przechowywania plików cookie, będzie przechowywać te informacje do daty wygaśnięcia. Jeśli użytkownik skieruje przeglądarkę na dowolną stronę, która jest zgodna ze ścieżką i domeną pliku cookie, wyśle ​​plik cookie ponownie na serwer. Nagłówki przeglądarki mogą wyglądać mniej więcej tak -

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126

Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz

Skrypt JSP będzie miał wtedy dostęp do plików cookie za pośrednictwem metody żądania request.getCookies()która zwraca tablicę obiektów Cookie .

Metody plików cookie serwletu

W poniższej tabeli wymieniono przydatne metody związane z obiektem Cookie, których można używać podczas manipulowania plikami cookie w JSP -

S.No. Metoda i opis
1

public void setDomain(String pattern)

Ta metoda ustawia domenę, do której odnosi się plik cookie; na przykład tutorialspoint.com.

2

public String getDomain()

Ta metoda pobiera domenę, do której odnosi się plik cookie; na przykład tutorialspoint.com.

3

public void setMaxAge(int expiry)

Ta metoda określa, ile czasu (w sekundach) powinno upłynąć, zanim plik cookie wygaśnie. Jeśli tego nie ustawisz, plik cookie będzie trwał tylko podczas bieżącej sesji.

4

public int getMaxAge()

Ta metoda zwraca maksymalny wiek pliku cookie określony w sekundach. Domyślnie -1 wskazanie, że plik cookie będzie trwał do wyłączenia przeglądarki.

5

public String getName()

Ta metoda zwraca nazwę pliku cookie. Nazwy nie można zmienić po utworzeniu.

6

public void setValue(String newValue)

Ta metoda ustawia wartość skojarzoną z plikiem cookie.

7

public String getValue()

Ta metoda pobiera wartość skojarzoną z plikiem cookie.

8

public void setPath(String uri)

Ta metoda określa ścieżkę, do której odnosi się ten plik cookie. Jeśli nie określisz ścieżki, plik cookie jest zwracany dla wszystkich adresów URL w tym samym katalogu co bieżąca strona, a także dla wszystkich podkatalogów.

9

public String getPath()

Ta metoda pobiera ścieżkę, do której odnosi się ten plik cookie.

10

public void setSecure(boolean flag)

Ta metoda ustawia wartość logiczną wskazującą, czy plik cookie powinien być wysyłany tylko za pośrednictwem połączeń szyfrowanych (tj. SSL).

11

public void setComment(String purpose)

Ta metoda określa komentarz opisujący przeznaczenie pliku cookie. Komentarz jest przydatny, jeśli przeglądarka wyświetla plik cookie użytkownikowi.

12

public String getComment()

Ta metoda zwraca komentarz opisujący cel tego pliku cookie lub null, jeśli plik cookie nie ma komentarza.

Ustawianie plików cookie za pomocą JSP

Konfiguracja plików cookie za pomocą JSP obejmuje trzy kroki -

Krok 1: Tworzenie obiektu Cookie

Wywołujesz konstruktor Cookie z nazwą pliku cookie i wartością pliku cookie, z których oba są ciągami.

Cookie cookie = new Cookie("key","value");

Pamiętaj, że ani nazwa, ani wartość nie powinny zawierać spacji ani żadnego z następujących znaków -

[ ] ( ) = , " / ? @ : ;

Krok 2: Ustalenie maksymalnego wieku

Używasz setMaxAgeaby określić, jak długo (w sekundach) plik cookie powinien być ważny. Poniższy kod utworzy plik cookie na 24 godziny.

cookie.setMaxAge(60*60*24);

Krok 3: wysyłanie pliku cookie do nagłówków odpowiedzi HTTP

Używasz response.addCookie aby dodać pliki cookie w nagłówku odpowiedzi HTTP w następujący sposób

response.addCookie(cookie);

Przykład

Zmodyfikujmy nasz Przykład formularza, aby ustawić pliki cookie dla imienia i nazwiska.

<%
   // Create cookies for first and last names.      
   Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
   Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
   
   // Set expiry date after 24 Hrs for both the cookies.
   firstName.setMaxAge(60*60*24); 
   lastName.setMaxAge(60*60*24); 
   
   // Add both the cookies in the response header.
   response.addCookie( firstName );
   response.addCookie( lastName );
%>

<html>
   <head>
      <title>Setting Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Setting Cookies</h1>
      </center>
      <ul>
         <li><p><b>First Name:</b>
            <%= request.getParameter("first_name")%>
         </p></li>
         <li><p><b>Last  Name:</b>
            <%= request.getParameter("last_name")%>
         </p></li>
      </ul>
   
   </body>
</html>

Wprowadźmy powyższy kod main.jsp plik i użyj go na następującej stronie HTML -

<html>
   <body>
      
      <form action = "main.jsp" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
      
   </body>
</html>

Zachowaj powyższą zawartość HTML w pliku hello.jsp i umieścić hello.jsp i main.jsp w <Tomcat-installation-directory>/webapps/ROOTinformator. Kiedy będziesz mieć dostęphttp://localhost:8080/hello.jsp, oto rzeczywisty wynik powyższego formularza.

Spróbuj wprowadzić imię i nazwisko, a następnie kliknij przycisk przesyłania. Spowoduje to wyświetlenie imienia i nazwiska na ekranie oraz ustawienie dwóch plików cookiefirstName i lastName. Te pliki cookie zostaną przekazane z powrotem do serwera po następnym kliknięciu przycisku Prześlij.

W następnej sekcji wyjaśnimy, w jaki sposób możesz uzyskać dostęp do tych plików cookie z powrotem w swojej aplikacji internetowej.

Czytanie plików cookie za pomocą JSP

Aby odczytać pliki cookie, musisz utworzyć tablicę obiektów javax.servlet.http.Cookie , wywołując metodęgetCookies( )metoda HttpServletRequest . Następnie przejdź przez tablicę i użyjgetName() i getValue() metody dostępu do każdego pliku cookie i związanej z nim wartości.

Przykład

Przeczytajmy teraz pliki cookie ustawione w poprzednim przykładzie -

<html>
   <head>
      <title>Reading Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Reading Cookies</h1>
      </center>
      <%
         Cookie cookie = null;
         Cookie[] cookies = null;
         
         // Get an array of Cookies associated with the this domain
         cookies = request.getCookies();
         
         if( cookies != null ) {
            out.println("<h2> Found Cookies Name and Value</h2>");
            
            for (int i = 0; i < cookies.length; i++) {
               cookie = cookies[i];
               out.print("Name : " + cookie.getName( ) + ",  ");
               out.print("Value: " + cookie.getValue( )+" <br/>");
            }
         } else {
            out.println("<h2>No cookies founds</h2>");
         }
      %>
   </body>
   
</html>

Umieśćmy teraz powyższy kod main.jspplik i spróbuj uzyskać do niego dostęp. Jeśli ustawiszfirst_name cookie jako „John” i last_name cookie jako „Player”, a następnie działa http://localhost:8080/main.jsp wyświetli następujący wynik -

Found Cookies Name and Value

Name : first_name, Value: John

Name : last_name, Value: Player

Usuń pliki cookie za pomocą JSP

Usunięcie plików cookie jest bardzo proste. Jeśli chcesz usunąć plik cookie, wystarczy wykonać te trzy kroki -

  • Przeczytaj już istniejący plik cookie i zapisz go w obiekcie Cookie.

  • Ustaw wiek pliku cookie na zero za pomocą setMaxAge() metoda usunięcia istniejącego pliku cookie.

  • Dodaj ten plik cookie z powrotem do nagłówka odpowiedzi.

Przykład

Poniższy przykład pokaże, jak usunąć istniejący plik cookie o nazwie "first_name" a kiedy następnym razem uruchomisz main.jsp JSP, zwróci wartość null dla first_name.

<html>
   <head>
      <title>Reading Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Reading Cookies</h1>
      </center>
      <%
         Cookie cookie = null;
         Cookie[] cookies = null;
         
         // Get an array of Cookies associated with the this domain
         cookies = request.getCookies();
         
         if( cookies != null ) {
            out.println("<h2> Found Cookies Name and Value</h2>");
            
            for (int i = 0; i < cookies.length; i++) {
               cookie = cookies[i];
               
               if((cookie.getName( )).compareTo("first_name") == 0 ) {
                  cookie.setMaxAge(0);
                  response.addCookie(cookie);
                  out.print("Deleted cookie: " + 
                  cookie.getName( ) + "<br/>");
               }
               out.print("Name : " + cookie.getName( ) + ",  ");
               out.print("Value: " + cookie.getValue( )+" <br/>");
            }
         } else {
            out.println(
            "<h2>No cookies founds</h2>");
         }
      %>
   </body>
   
</html>

Umieśćmy teraz powyższy kod w main.jspplik i spróbuj uzyskać do niego dostęp. Wyświetli następujący wynik -

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name, Value: Player

Teraz ponownie uruchom http: // localhost: 8080 / main.jsp i powinien wyświetlić tylko jeden plik cookie w następujący sposób -

Found Cookies Name and Value

Name : last_name, Value: Player

Możesz ręcznie usunąć pliki cookie w przeglądarce Internet Explorer. Rozpocznij od menu Narzędzia i wybierz Opcje internetowe. Aby usunąć wszystkie pliki cookie, kliknij przycisk Usuń pliki cookie.