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.