HTTP ist ein zustandsloses Protokoll, was bedeutet, dass jedes Mal, wenn ein Client eine Webseite abruft, eine separate Serververbindung geöffnet wird, sodass der Server keine Informationen aus früheren Client-Anfragen aufzeichnet.
Es gibt drei Möglichkeiten, eine Client-Server-Sitzung aufrechtzuerhalten:
Ein Webserver kann eine eindeutige Sitzungs-ID als Cookie zuweisen, um jeden Client darzustellen und nachfolgende Anfragen von diesem Client zu identifizieren.
Dies ist möglicherweise keine effiziente Methode, da Browser Cookies häufig nicht unbedingt unterstützen. Wir empfehlen daher nicht, diese Methode zur Aufrechterhaltung der Sitzung zu verwenden.
Ein Webserver kann ein verstecktes HTML-Formularfeld und eine eindeutige Sitzungs-ID senden, etwa so:
<input type="hidden" name="sessionid" value="12345">
Dieser Eintrag bedeutet, dass beim Absenden des Formulars der angegebene Name und Wert automatisch in die GET- oder POST-Daten aufgenommen werden. Immer wenn der Browser eine Anfrage sendet, kann der Wert von session_id verwendet werden, um Spuren verschiedener Browser zu speichern.
Dieser Ansatz mag ein effizienter Ansatz sein, aber durch Klicken auf einen Hyperlink in einem <A HREF>-Tag wird kein Formularübermittlungsereignis generiert, sodass ausgeblendete Formularfelder keine universelle Sitzungsverfolgung unterstützen.
Sie können nach jeder URL einige zusätzliche Daten hinzufügen, um die Sitzung zu unterscheiden, und der Server kann die Sitzungskennung basierend auf diesen Daten zuordnen.
Beispiel: http://w3cschool.cn/file.htm;sessionid=12345, die Sitzungskennung ist sessionid=12345, der Server kann diese Daten verwenden, um den Client zu identifizieren.
Im Vergleich dazu ist das Umschreiben der URL eine bessere Möglichkeit und funktioniert auch dann, wenn der Browser keine Cookies unterstützt. Der Nachteil besteht jedoch darin, dass Sie die Sitzungs-ID für jede URL dynamisch angeben müssen, selbst wenn es sich um eine einfache HTML-Seite handelt.
Zusätzlich zu den oben genannten Methoden verwendet JSP die vom Servlet bereitgestellte HttpSession-Schnittstelle, um einen Benutzer zu identifizieren und alle Zugriffsinformationen dieses Benutzers zu speichern.
Standardmäßig ermöglicht JSP die Sitzungsverfolgung und für neue Clients wird automatisch ein neues HttpSession-Objekt instanziiert. Um die Sitzungsverfolgung zu deaktivieren, muss sie explizit deaktiviert werden. Dies wird erreicht, indem der Wert des Sitzungsattributs in der Seitenanweisung wie folgt auf „false“ gesetzt wird:
<%@ page session="false" %>
Die JSP-Engine macht das zugrunde liegende Sitzungsobjekt für Entwickler verfügbar. Da das Sitzungsobjekt bereitgestellt wird, können Entwickler Daten problemlos speichern oder abrufen.
In der folgenden Tabelle sind einige wichtige Methoden des Sitzungsobjekts aufgeführt:
SN | Methode und Beschreibung |
---|---|
1 | public Object getAttribute(String name) gibt das Objekt zurück, das an den angegebenen Namen im Sitzungsobjekt gebunden ist, oder null, wenn es nicht existiert. |
2 | Die öffentliche Enumeration getAttributeNames() gibt alle Objektnamen im Sitzungsobjekt zurück |
3 | public long getCreationTime() gibt den Zeitpunkt der Erstellung des Sitzungsobjekts in Millisekunden zurück, beginnend mit dem frühen Morgen des 1. Januar 1970 |
4 | public String getId() gibt die ID des Sitzungsobjekts zurück |
5 | public long getLastAccessedTime() gibt die letzte Zugriffszeit des Clients in Millisekunden zurück, beginnend mit dem frühen Morgen des 1. Januar 1970 |
6 | public int getMaxInactiveInterval() gibt das maximale Zeitintervall in Sekunden zurück, während dessen der Servlet-Container die Sitzung geöffnet hält |
7 | public void invalidate() macht die Sitzung ungültig und löst die Bindung aller an die Sitzung gebundenen Objekte. |
8 | public boolean isNew( gibt zurück, ob es sich um einen neuen Client handelt oder ob der Client sich weigert, der Sitzung beizutreten |
9 | public void removeAttribute(String name) entfernt das Objekt mit dem angegebenen Namen in der Sitzung |
10 | public void setAttribute(String name, Object value) verwendet den angegebenen Namen und Wert, um ein Objekt zu generieren und es an die Sitzung zu binden |
11 | public void setMaxInactiveInterval(int Interval) wird verwendet, um die Zeit in Sekunden anzugeben, während der der Servlet-Container die Sitzung gültig hält. |
In diesem Beispiel wird beschrieben, wie das HttpSession-Objekt verwendet wird, um die Erstellungszeit und die Zeit des letzten Zugriffs abzurufen. Wir werden dem Anforderungsobjekt ein neues Sitzungsobjekt zuordnen, sofern es noch nicht vorhanden ist.
<%@ page import="java.io.*,java.util.*" %><% // Holen Sie sich die Zeit der Sitzungserstellung Date createTime = new Date(session.getCreationTime()); letzte besuchte Seite Datum lastAccessTime = new Date(session.getLastAccessedTime()); String title = "Willkommen zurück auf meiner Website" VisitCount = new Integer(0); new String("visitCount"); String userIDKey = new String("userID"); String userID = new String("ABCD"); // Überprüfen Sie, ob die Webseite von einem neuen Benutzer besucht wird; ){ title = „Willkommen auf meiner Website“; session.setAttribute(userIDKey, userID); } visitCount = (Integer)session.getAttribute(visitCountKey); visitCount = visitCount + 1; userID = (String)session.getAttribute(userIDKey); %><html><head><title>Session Tracking </title></head><body><center><h1>Sitzungsverfolgung</h1></center><table align="center"> <tr bgcolor="#949494"> <th>Sitzungsinfo</th> <th>Wert</th></tr> <tr> <td>id</td> <td><% out.print( session. getId()); %></td></tr> <tr> <td>Erstellungszeit</td> <td><% out.print(createTime) < tr> <td>Zeit des letzten Zugriffs</td> <td><% out.print(lastAccessTime> %></td></tr> <tr> <td>Benutzer-ID</td> <td><%; out.print(userID); %></td></tr> <tr> <td>Anzahl der Besuche</td> <td><% out.print(visitCount); tr> </table> </body></html>
Versuchen Sie, auf http://localhost:8080/main.jsp zuzugreifen. Beim ersten Ausführen werden die folgenden Ergebnisse erzielt:
Besuchen Sie uns erneut und Sie erhalten folgende Ergebnisse:
Nach der Verarbeitung der Sitzungsdaten eines Benutzers haben Sie folgende Möglichkeiten:
Entfernen Sie ein bestimmtes Attribut:
Rufen Sie die Methode public void removeAttribute(String name) auf, um das angegebene Attribut zu entfernen.
Löschen Sie die gesamte Sitzung:
Rufen Sie die Methode public void invalidate() auf, um die gesamte Sitzung ungültig zu machen.
Gültigkeitsdauer der Sitzung festlegen:
Rufen Sie die öffentliche Methode void setMaxInactiveInterval(int Interval) auf, um das Sitzungszeitlimit festzulegen.
Abmeldebenutzer:
Server, die die Servlet-Version 2.4 unterstützen, können die Methode logout() aufrufen, um den Benutzer abzumelden und alle zugehörigen Sitzungen ungültig zu machen.
Konfigurieren Sie die Datei web.xml:
Wenn Sie Tomcat verwenden, können Sie die Datei web.xml wie folgt konfigurieren:
<session-config> <session-timeout>15</session-timeout> </session-config>
Das Zeitlimit wird in Minuten angegeben und das Standardzeitlimit in Tomcat beträgt 30 Minuten.
Die Methode getMaxInactiveInterval() in Servlet gibt den Timeout in Sekunden zurück. Wenn in web.xml 15 Minuten konfiguriert sind, gibt die Methode getMaxInactiveInterval() 900 zurück.