Obsługa ciasteczek przez kontenery webowe w aplikacjach J2EE
6 years, 8 months ago

Chociaż ciasteczka (czasem nazywane też znacznikami kontekstu klienta) były początkowo projektowane z myślą o obsługą stanu sesji, to możemy ich z powodzeniem używać do innych, własnych celów.

Ciasteczko nie jest niczym więcej, niż maleńką porcją danych przekazywaną z klienta na serwer i na odwrót. Serwer wysyła ciasteczko do klienta, który zwraca to samo ciasteczko wraz z kolejnym żądaniem HTTP.

W jaki sposób przesyłane są ciasteczka?

Serwer wysyła każde ciasteczko do klienta w postaci nagłówka Set-Cookie protokołu HTTP:

SetCookie: nazwaCiasteczka=wartośćCiasteczka; expires=DATA; path=ŚCIEŻKA; domain=DOMENA; secure

  • nazwaCiasteczka=wartośćCiasteczka - to jedyny wymagany atrybut określający ciasteczko i przypisaną mu wartość
  • expires=DATA - atrybut expires informuje przeglądarkę o dacie wygaśnięcia ciasteczka. Zostanie ono usunięte, gdy jego data ważności zostanie przekroczona. Jeśli nie podano daty wygaśnięcia, to ciasteczko zostanie usunięte po zakończeniu sesji. 
  • domain=DOMENA - określa widoczność ciasteczka. W trakcie sprawdzania pliku na komputerze klienta zawierającego ciasteczka, przeglądarka porównuje zapisaną domenę z domeną serwera, do którego wysyła nagłówki. Przeglądarka wysyła wszystkie nie przeterminowane ciasteczka, których domena jest zawarta w domenie serwera (dodatkowo może być sprawdzana ścieżka wywoływanego pliku i typ połączenia).
  • path=ŚCIEŻKA - atrybut path jest podawany w celu ograniczenia widoczności ciasteczka do danej ścieżki dostępu do katalogu. Dane ciasteczko będą mogły wykorzystywać wszystkie strony umieszczone w danym katalogu i jego podkatalogach. Domyślnie path przyjmuje wartość ścieżki do strony, z której wysłano żądanie zapisu ciasteczka.
  • secure - jeśli zostanie podane, to ciasteczko będzie widoczne (wysłane) tylko wtedy gdy połączenie będzie szyfrowane (protokołem HTTPS)

 

Klient odsyła wszystkie otrzymane wcześniej ciasteczka na serwer w postaci nagłówja Cookie protokołu HTTP:

Cookie: nazwaCiasteczka=wartośćCiasteczka; nazwaCiasteczka2=wartośćCiasteczka2; ...

Specjalne ciasteczko sesji

Oprócz wszystkich ciasteczek, po stronie serwera tworzone jest specjalne ciasteczko identyfikujące sesję. To właśnie dzięki temu ciasteczku zapamiętywany jest identyfikator sesji przesyłany między klientem a serwerem. Ciasteczko to zawsze posiada nazwę "JSESSIONID". Dlatego nigdy nie powinniśmy tworzyć swojego ciasteczka o takiej samej nazwie.

Jak tworzymy i odczytujemy ciasteczka w aplikacji J2EE?

Ciasteczko identyfikujące sesję powstaje w wyniku wywołania metody getSession() na obiekcie żądania HttpSevletRequest. Nasze prywatne ciasteczka możemy jednak tworzyć wywołując metodę response.addCookie(Cookie cookie) na obiekcie odpowiedzi HttpSessionResponse. Obiekt typu Cookie zawiera odpowiedni zestaw metod do ustawiania parametrów ciasteczka.

Wszystkie ciasteczka możemy przeczytać przez wywołanie metody Cookie[] response.getCookies() na obiekcie żądania HttpServletRequest. Niestety nie istnieje coś takiego jak metoda setCookie(Cookie cookie) albo getCookie(String). 

Jak długo żyją ciasteczka?

Ciasteczka domyślnie żyją tylko przez okres istnienia sesji. Innymi słowy jeśli klient zamknie przeglądarkę, to wszystkie jego ciasteczka znikną (wraz z ciasteczkiem identyfikującym sesję). Przez odpowiednie ustawienie przeglądarki możemy jednak wymusić na ciasteczku, aby nie znikało po zamknięciu przeglądarki. Z wykorzystaniem interfejsu API serwletów, możemy także zdefiniować czas życia ciasteczka:

cookie.setMaxAge(30*60);

Metoda setMaxAge(int) definiuje czas życia ciasteczka w sekundach. Ustawienie maksymalnego czasu równego -1 powoduje, że znacznik kontekstu zniknie w momencie usunięcia przez przeglądarkę. Innymi słowy nawet jeśli ustawimy dowolnie długi czas życia ciasteczka, to jeśli przeglądarka nie ma ustawionej odpowiedniej właściwości pamiętania ciasteczek po zamknięciu okna i zamkniemy przeglądarkę - ciasteczko przestanie istnieć. Ogólnie działanie mechanizmu ciasteczek po stronie użytkownika zależy właśnie od konfiguracji jego przeglądarki. Niektóre z nich umożliwiają odmowę zapisu, inne pozwalają na ustawienie daty wygaśnięcia innej od tej deklarowanej w nagłówku HTTP.

Joanna Dzikowska
Comments
18
RSS Google+ Facebook Twitter LinkedIn
Lucid Mailer
Effective email marketing: newsletters, bulletins,
mailing campaigns
Lucid CRM
Customer relationship management, internal communication, individual sale
Lucid Sale
Sales assistant with custom-made
e-commerce platforms
Lucid Assistance
Post-Sales support for customers and troubleshooting solutions
Lucid Panel
Software for remote administration of
dedicated servers
Copyright © 2002-2012 Spacja.com