ZAWWW-2st1.2-w10.tresc-1.0-Slajd3
Zarządzanie sesją
Sesją HTTP nazywamy konwersację, na którą składa się wiele żądań i odpowiedzi przesłanych między klientem HTTP i serwerem. Identyfikacja sesji jest zadaniem trudnym, w szczególności w przypadku wykorzystywania serwerów proxy lub współdzielenia komputerów przez wielu użytkowników. Protokół HTTP jest protokołem bezstanowym, co w dużej mierze utrudnia tworzenie aplikacji internetowych.
Stan sesji może być przechowywany po stronie klienta HTTP, konieczne jest wówczas umieszczanie stanu sesji w każdym dokumencie HTML wysyłanym klientowi. Stan sesji może być przekazany klientowi poprzez ukryte pola formularza HTML (znacznik <input type="hidden">). Rozwiązanie to posiada wiele wad. Dokumenty stają się duże, ponieważ każdy dokument przechowuje cały stan sesji, wzrasta obciążenie komunikacji sieciowej. Zjawisko to staje się bardzo niekorzystne w przypadku gdy sesja zawiera wiele danych. Dane sesji nie są szyfrowane i stan sesji jest widoczny w kodzie HTML. Stan sesji jest ograniczony tylko do danych tekstowych, referencje do obiektów muszą być serializowane. Innym rozwiązaniem jest przechowywanie stanu sesji w zmiennych cookies. Rozwiązanie to posiada podobne wady jak wykorzystanie ukrytych pól formularzy HTML. Dodatkowo, pojawiają się ograniczenia dotyczące rozmiaru i typu elementów stanu sesji u klienta oraz ograniczenie dotyczące długości nagłówka HTTP. Kolejnym problemem jest bezpieczeństwo i poufność stanu sesji po stronie klienta.
W aplikacjach klasy enterprise zaleca się przechowywanie stanu sesji po stronie serwera. Klient jest zobowiązany do dostarczenia identyfikatora sesji (przekazywany przez zmienną cookie lub jako część adresu URL), zmienne sesji są przechowywane w warstwie prezentacji. Takie rozwiązanie wymaga demarkacji sesji. Zazwyczaj sesja kończy się gdy (1) upłynął określony czas bezczynności (2) sesja została jawnie zakończona. Przechowywanie stanu sesji w warstwie prezentacji pozwala na przechowywanie stanu sesji postaci obiektów (brak konieczności serializacji obiektów), wspiera skalowalność i wpływa pozytywnie na wydajność systemu.
Istnieje także możliwość wykorzystania warstw biznesowej lub zasobów do przechowywania stanu sesji. W pierwszym przypadku stan sesji jest przechowywany w komponentach encyjnych, w drugim przypadku jest umieszczany w relacyjnej bazie danych. Oba rozwiązania są jednak mniej wskazane niż przechowywanie stanu sesji w warstwie prezentacji.