www.math.uni.lodz.pl/ radmat
Ciasteczka trwałe i sesyjne Ciasteczka trwałe - pozostają na komputerze użytkownika po zamknięciu strony, z której zostały pobrane / przeglądarki. Ciasteczka sesyjne - są związane z daną sesją przeglądarki i wygasają po jej zamknięciu.
Z programistycznego punktu widzenia, rozróżnienie między oboma rodzajami ciasteczek polega na ustawieniu wartości metody setmaxage. Ustawienie wartości 0 powoduje natychmiastowe usunięcie ciasteczka, natomiast -1 usuwa ciasteczko z chwilą zamknięcia przeglądarki.
Ćwiczenie 1 Proszę napisać serwlet ustawiający w jednym pliku nazwy i wartości trzech ciasteczek sesyjnych i trzy nazwy i wartości ciasteczek trwałych oraz wypisujący w drugim pliku aktywne ciasteczka.
Ćwiczenie 2 Proszę napisać aplikację spełniającą następujące założenia: na pierwszej stronie wyświetlamy linki: zaloguj, wyloguj, profil; dane logowania (login i e-mail wpisane w kodzie programu) należy przechowywać w ciasteczkach; jeśli będziemy zalogowani, to po wybraniu profilu powinny się wyświetlić login i e-mail. Do przekierowania na inną stronę (np. po wylogowaniu na stronę główną) użyjemy następującej metody: request.getrequestdispatcher("login.html").include(request, response);
Sesje Obsługa sesji jest nieodłącznym elementem większości aplikacji webowych. Sesja służy zapisywaniu informacji o poszczególnych klientach odwiedzających daną stronę. Informacje te zapisywane są na serwerze i identyfikowane przez odpowiednie ciasteczko wysyłane do klienta. W celu uzyskania obiektu sesji z serwletu należy posłużyć się odpowiednią metodą obiektu klasy request. HttpSession getsession() lub HttpSession getsession(boolean czytworzyc).
Pierwszy wariant metody równoważny jest drugiemu, wywołanemu z parametrem true. W przypadku drugiego wariantu metody: jeśli parametr ma wartość true, to metoda zwraca obiekt sesji lub tworzy nowy, jeśli ten nie istnieje; jeśli parametr ma wartość false, to metoda zwraca obiekt sesji lub null, jeśli ten nie istnieje. Wartość true należy przekazać, gdy chcemy po prostu uzyskać dostęp do sesji. Wartość false stosujemy, gdy chcemy sprawdzić, czy sesja istnieje.
Wybrane metody klasy HttpSession: getattributenames() - zwraca nazwy wszystkich obiektów przechowywanych w sesji setattribute(string nazwa, Object wartość) - dodaje obiekt do sesji i przypisuje mu podany klucz (nazwę) getattribute(string nazwa) - zwraca atrybut sesji o podanej nazwie getid() - zwraca identyfikator sesji dla danego klienta getcreationtime() - zwraca czas utworzenia sesji getlastaccessedtime() - zwraca czas odwoływania się danego klienta do sesji
setmaxinactivetime() - ustawia czas, po jakim sesja zostanie usunięta getmaxinactivetime() - zwraca czas, po jakim sesja zostanie usunięta invalidate() - usuwa wszystkie dane z sesji isnew() - sprawdza, czy sesja była już używana removeattribute() - usuwa podany atrybut z sesji
Warunki zakończenia sesji: ręczne zakończenie sesji przez programistę; upłynięcie czasu życia sesji; zamknięcie okna przeglądarki przez użytkownika. Istnienie terminu ważności sesji można określić albo w pliku web.xml, albo pisząc w kodzie metodę void setmaxinactiveinterval(int czas), która określa czas życia sesji w milisekundach. Wartości ujemne i zero powodują, że sesja nigdy nie wygasa (zatem do jej zakończenia niezbędne jest użycie metody invalidate() lub zamknięcie okna przeglądarki).
Sesja zawiera: całość informacji o stanie współpracy użytkownika z programem, czyli m.in. ID i inne dane użytkownika, uprawnienia użytkownika, czy też ID i kontekst aktualnego formularza; zbiór danych tworzących sesję może mieć znaczne rozmiary, dlatego między klientem, a serwerem przekazywany jest tylko identyfikator sesji.
Metody obsługi sesji: w elemencie HIDDEN (dla metody GET ma ograniczoną wielkość, istnieje także ryzyko manipulacji przez klienta); w cookie (ograniczona wielkość, limitowana przez ciasteczko; również istnieje ryzyko manipulacji przez klienta); w obiekcie serwera (dla bezpiecznych aplikacji zaleca się stosowanie protokołu HTTPS).
Ćwiczenie 1 Wykorzystując mechanizm sesji proszę sprawdzać wejścia na stronę i wyświetlać jedynie informację, czy są to pierwsze odwiedziny, czy kolejne.
Ćwiczenie 2 Proszę ponownie napisać aplikację, której działanie przedstawia poniższy schemat, tym razem jednk wykorzystując mechanizm sesji.