JSP - śledzenie sesji

W tym rozdziale omówimy śledzenie sesji w JSP. HTTP jest protokołem „bezstanowym”, co oznacza, że ​​za każdym razem, gdy klient pobiera stronę internetową, klient otwiera oddzielne połączenie z serwerem sieci Web, a serwer automatycznie nie przechowuje żadnego zapisu poprzedniego żądania klienta.

Utrzymywanie sesji między klientem WWW a serwerem

Omówmy teraz kilka opcji utrzymania sesji między klientem internetowym a serwerem internetowym -

Ciasteczka

Serwer sieciowy może przypisać unikalny identyfikator sesji jako plik cookie każdemu klientowi sieciowemu, a przy kolejnych żądaniach klienta może zostać rozpoznany za pomocą otrzymanego pliku cookie.

Może to nie być skuteczny sposób, ponieważ przeglądarka czasami nie obsługuje plików cookie. Nie zaleca się korzystania z tej procedury w celu utrzymania sesji.

Ukryte pola formularzy

Serwer sieciowy może wysłać ukryte pole formularza HTML wraz z unikalnym identyfikatorem sesji w następujący sposób -

<input type = "hidden" name = "sessionid" value = "12345">

Ten wpis oznacza, że ​​po przesłaniu formularza określona nazwa i wartość są automatycznie uwzględniane w pliku GET albo POSTdane. Za każdym razem, gdy przeglądarka internetowa odsyła żądanie, pliksession_id wartość może służyć do śledzenia różnych przeglądarek internetowych.

Może to być skuteczny sposób śledzenia sesji, ale kliknięcie zwykłego (<A HREF...>) łącza hipertekstowego nie powoduje wysłania formularza, więc ukryte pola formularzy również nie obsługują ogólnego śledzenia sesji.

Przepisywanie adresów URL

Możesz dołączyć dodatkowe dane na końcu każdego adresu URL. Dane te identyfikują sesję; serwer może powiązać ten identyfikator sesji z przechowywanymi danymi dotyczącymi tej sesji.

Na przykład z http://tutorialspoint.com/file.htm;sessionid=12345, identyfikator sesji jest dołączony jako sessionid = 12345 do których można uzyskać dostęp na serwerze sieciowym w celu identyfikacji klienta.

Przepisywanie adresów URL to lepszy sposób na utrzymanie sesji i działa w przeglądarkach, gdy nie obsługują plików cookie. Wadą jest to, że każdy adres URL trzeba będzie generować dynamicznie, aby przypisać identyfikator sesji, chociaż strona jest prostą statyczną stroną HTML.

Obiekt sesji

Oprócz wyżej wymienionych opcji, JSP korzysta z dostarczonego przez serwlet HttpSession Interface. Ten interfejs umożliwia identyfikację użytkownika w całej.

  • żądanie na jedną stronę lub
  • wizyta w witrynie internetowej lub
  • przechowywać informacje o tym użytkowniku

Domyślnie strony JSP mają włączone śledzenie sesji, a nowy obiekt HttpSession jest automatycznie tworzony dla każdego nowego klienta. Wyłączenie śledzenia sesji wymaga jawnego wyłączenia go przez ustawienie atrybutu session dyrektywy strony na wartość false w następujący sposób -

<%@ page session = "false" %>

Mechanizm JSP udostępnia obiekt HttpSession autorowi strony JSP za pośrednictwem niejawnego sessionobiekt. Odsession obiekt jest już dostarczony do programisty JSP, programista może natychmiast rozpocząć przechowywanie i pobieranie danych z obiektu bez żadnej inicjalizacji lub getSession().

Oto podsumowanie ważnych metod dostępnych za pośrednictwem obiektu sesji -

S.No. Metoda i opis
1

public Object getAttribute(String name)

Ta metoda zwraca obiekt powiązany z określoną nazwą w tej sesji lub null, jeśli żaden obiekt nie jest powiązany pod nazwą.

2

public Enumeration getAttributeNames()

Ta metoda zwraca Enumeration of String obiektów zawierających nazwy wszystkich obiektów powiązanych z tą sesją.

3

public long getCreationTime()

Ta metoda zwraca czas utworzenia sesji, mierzony w milisekundach od północy 1 stycznia 1970 GMT.

4

public String getId()

Ta metoda zwraca ciąg zawierający unikatowy identyfikator przypisany do tej sesji.

5

public long getLastAccessedTime()

Ta metoda zwraca czas ostatniego wysłania przez klienta żądania związanego z tą sesją jako liczbę milisekund od północy 1 stycznia 1970 GMT.

6

public int getMaxInactiveInterval()

Ta metoda zwraca maksymalny interwał czasu (w sekundach), w którym kontener serwletu będzie utrzymywał otwartą sesję między kolejnymi dostępami klientów.

7

public void invalidate()

Ta metoda unieważnia tę sesję i usuwa powiązania wszystkich obiektów z nią związanych.

8

public boolean isNew()

Ta metoda zwraca wartość true, jeśli klient nie wie jeszcze o sesji lub jeśli zdecyduje się nie dołączać do sesji.

9

public void removeAttribute(String name)

Ta metoda usuwa obiekt powiązany z określoną nazwą z tej sesji.

10

public void setAttribute(String name, Object value)

Ta metoda wiąże obiekt z tą sesją przy użyciu określonej nazwy.

11

public void setMaxInactiveInterval(int interval)

Ta metoda określa czas w sekundach między żądaniami klientów, zanim kontener serwletów unieważni sesję.

Przykład śledzenia sesji

W tym przykładzie opisano, jak używać obiektu HttpSession, aby znaleźć czas utworzenia i czas ostatniego dostępu dla sesji. Skojarzymy nową sesję z żądaniem, jeśli jeszcze nie istnieje.

<%@ page import = "java.io.*,java.util.*" %>
<%
   // Get session creation time.
   Date createTime = new Date(session.getCreationTime());
   
   // Get last access time of this Webpage.
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "Welcome Back to my website";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // Check if this is new comer on your Webpage.
   if (session.isNew() ){
      title = "Welcome to my website";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } 
   visitCount = (Integer)session.getAttribute(visitCountKey);
   visitCount = visitCount + 1;
   userID = (String)session.getAttribute(userIDKey);
   session.setAttribute(visitCountKey,  visitCount);
%>

<html>
   <head>
      <title>Session Tracking</title>
   </head>
   
   <body>
      <center>
         <h1>Session Tracking</h1>
      </center>
      
      <table border = "1" align = "center"> 
         <tr bgcolor = "#949494">
            <th>Session info</th>
            <th>Value</th>
         </tr> 
         <tr>
            <td>id</td>
            <td><% out.print( session.getId()); %></td>
         </tr> 
         <tr>
            <td>Creation Time</td>
            <td><% out.print(createTime); %></td>
         </tr> 
         <tr>
            <td>Time of Last Access</td>
            <td><% out.print(lastAccessTime); %></td>
         </tr> 
         <tr>
            <td>User ID</td>
            <td><% out.print(userID); %></td>
         </tr> 
         <tr>
            <td>Number of visits</td>
            <td><% out.print(visitCount); %></td>
         </tr> 
      </table> 
   
   </body>
</html>

Teraz wstaw powyższy kod main.jsp i spróbuj uzyskać dostęp http://localhost:8080/main.jsp. Po uruchomieniu adresu URL otrzymasz następujący wynik -

Witam na mojej stronie internetowej

Session Information

Informacje o sesji wartość
ID 0AE3EC93FF44E3C525B4351B77ABB2D5
Czas utworzenia Wtorek 08 czerwca 17:26:40 GMT + 04: 00 2010
Czas ostatniego dostępu Wtorek 08 czerwca 17:26:40 GMT + 04: 00 2010
Identyfikator użytkownika ABCD
Liczba odwiedzin 0

Teraz spróbuj ponownie uruchomić tę samą stronę JSP, a otrzymasz następujący wynik.

Witam z powrotem na mojej stronie

Session Information

typ informacji wartość
ID 0AE3EC93FF44E3C525B4351B77ABB2D5
Czas utworzenia Wtorek 08 czerwca 17:26:40 GMT + 04: 00 2010
Czas ostatniego dostępu Wtorek 08 czerwca 17:26:40 GMT + 04: 00 2010
Identyfikator użytkownika ABCD
Liczba odwiedzin 1

Usuwanie danych sesji

Gdy skończysz z danymi sesji użytkownika, masz kilka opcji -

  • Remove a particular attribute - Możesz zadzwonić do public void removeAttribute(String name) metoda usuwania wartości skojarzonej z określonym kluczem.

  • Delete the whole session - Możesz zadzwonić do public void invalidate() metoda, aby odrzucić całą sesję.

  • Setting Session timeout - Możesz zadzwonić do public void setMaxInactiveInterval(int interval) metoda indywidualnego ustawiania limitu czasu dla sesji.

  • Log the user out - Serwery obsługujące serwlety 2.4, możesz zadzwonić logout aby wylogować klienta z serwera WWW i unieważnić wszystkie sesje należące do wszystkich użytkowników.

  • web.xml Configuration - Jeśli używasz Tomcata, oprócz wyżej wymienionych metod, możesz skonfigurować limit czasu sesji w pliku web.xml w następujący sposób.

<session-config>
   <session-timeout>15</session-timeout>
</session-config>

Limit czasu jest wyrażany w minutach i zastępuje domyślny limit czasu, który w Tomcat wynosi 30 minut.

Plik getMaxInactiveInterval( )metoda w serwlecie zwraca limit czasu dla tej sesji w sekundach. Jeśli więc sesja jest skonfigurowana w pliku web.xml na 15 minut,getMaxInactiveInterval( ) zwraca 900.