Latest web development tutorials

JSP Session

HTTP ist ein zustandsloses Protokoll, was bedeutet, dass jedes Mal, wenn ein Client-Seiten abruft, muss eine separate Verbindung Server öffnen, wird der Server erst dann der vorherige Kunde keine Informationen anfordert.

Es gibt drei Möglichkeiten Sitzungen Client und Server zu halten:


Kekse

Netzwerk-Server kann eine eindeutige Session-ID als Cookie zuweisen jeden Kunden zu repräsentieren die Kunden nächste Anforderung zu identifizieren.

Dies kann nicht ein effizienter Weg sein, weil eine Menge Zeit nicht notwendigerweise die Browser-Cookie unterstützen, so dass wir nicht empfehlen, diese Methode unter Verwendung von Session zu halten.


Versteckte Formularfelder

Ein Web-Server kann eine versteckte HTML-Formularfelder und eine eindeutige Session-ID, wie diese an:

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

Dieser Eintrag bedeutet, dass, wenn das Formular abgeschickt wird, wird der angegebene Name und Wert automatisch in GET oder POST-Daten enthalten sein. Jedes Mal, wenn der Browser eine Anfrage sendet, kann der session_id Wert verwendet werden, um verschiedene Browser Trajektorie zu speichern.

Dieser Ansatz kann ein effektiver Weg sein, aber nicht ein Formular Vorlage Ereignis <A HREF> Registerkarte Hyperlink, und deshalb versteckt Formularfelder unterstützen keine generische Session-Tracking Klicken produzieren.


URL-Rewriting

Sie können zusätzliche Daten hinter jeder URL hinzufügen, die Sitzung zu unterscheiden, entsprechend der Datenserver Sitzungskennung zugeordnet werden können.

Zum Beispiel http: //w3cschool.cc/file.htm; sessionid = 12345, Sitzungskennung sessionid = 12345, kann der Server diese Daten verwenden, um den Client zu identifizieren.

Im Gegensatz dazu ist das URL-Neuschreiben einen besseren Weg, auch wenn der Browser keine Cookies unterstützen kann auch funktionieren, aber der Nachteil ist, dass Sie eine Session-ID für jede dynamische URL angeben müssen, auch wenn es sich um eine einfache HTML-Seite ist.


Sitzungsobjekte

Zusätzlich zu den oben genannten verschiedenen Methoden außerhalb stellt JSP Servlet Http Schnittstelle einen Benutzer zu identifizieren, verwenden, die alle den Zugriff des Benutzers auf Informationen zu speichern.

In der Standardeinstellung erlaubt JSP die Session-Tracking, ein neues Http Objekt wird automatisch für neue Client-instanziiert. Verbot Session-Tracking muss es explizit von der Seite Richtlinie Sitzungsattributwert auf false deaktivieren zu erreichen, wie folgt:

<%@ page session="false" %>

JSP-Engine implizite Sitzungsobjekt wird dem Entwickler ausgesetzt. Durch die Bereitstellung eines Sitzungsobjekts, können Entwickler auf einfache Weise speichern oder Daten abzurufen.

Die folgende Tabelle listet einige der wichtigen Wege-Session-Objekt:

SN Method & Beschreibung
1 public Object getAttribute (String name)

Das zurückgegebene Objekt Session-Objekt mit dem angegebenen Namen gebunden ist, oder null, wenn keine vorhanden sind
2 Öffentliche Enumeration getAttributeNames ()

Liefert die Session-Objekt alle Objektnamen
3 public long getCreationTime ()

Gibt das Sitzungsobjekt wird Zeit erstellt, in Millisekunden, ab 1. Januar 1970 das Datum des frühen Morgens
4 public String getId ()

Gibt die Session-Objekt-ID
5 public long getLastAccessedTime ()

Gibt das letzte Mal, wenn der Kunde besucht, in Millisekunden, ab dem 1. Januar 1970 das Datum des frühen Morgens
6 public int getMaxInactiveInterval ()

Gibt die maximale Zeitintervall in Sekunden an, Servlet-Container wird die Sitzung offen zu diesem Zeitpunkt halten
7 public void invalidate ()

Die Sitzung Ungültigkeits, alle Objekte, die Entbündelung der Sitzung gebunden
8 public boolean isNew (

Gibt an, ob ein neuer Kunde, oder wenn der Kunde an der Sitzung teilzunehmen verweigert
9 public void removeAttribute (String name)

Entfernen Sie die angegebene Sitzung Objektnamen
10 public void setAttribute (String name, Object value)

Um ein Objekt mit dem angegebenen Namen und Wert erzeugen und an die Sitzung gebunden
11 public void setMaxInactiveInterval (int - Intervall)

Um die Zeit zu geben, in Sekunden wird Servlet-Container halten die Sitzung gültig während dieser Zeit

JSP Session Anwendung

In diesem Beispiel wird beschrieben, wie die Http Objekt zu verwenden, um die Erstellungszeit und der letzten Zugriffszeit zu erhalten. Wir werden eine neue Session-Objekt für das zugehörige Request-Objekt sein, wenn dieses Objekt nicht existiert bereits.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<%
   // 获取session创建时间
   Date createTime = new Date(session.getCreationTime());
   // 获取最后访问页面的时间
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "再次访问本教程实例";
   Integer visitCount = new Integer(0);
   String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // 检测网页是否由新的访问用户
   if (session.isNew()){
      title = "访问本教程实例";
      session.setAttribute(userIDKey, userID);
      session.setAttribute(visitCountKey,  visitCount);
   } else {
	   visitCount = (Integer)session.getAttribute(visitCountKey);
	   visitCount += 1;
	   userID = (String)session.getAttribute(userIDKey);
	   session.setAttribute(visitCountKey,  visitCount);
   }
%>
<html>
<head>
<title>Session 跟踪</title>
</head>
<body>

<h1>Session 跟踪</h1>

<table border="1" align="center"> 
<tr bgcolor="#949494">
   <th>Session 信息</th>
   <th>值</th>
</tr> 
<tr>
   <td>id</td>
   <td><% out.print( session.getId()); %></td>
</tr> 
<tr>
   <td>创建时间</td>
   <td><% out.print(createTime); %></td>
</tr> 
<tr>
   <td>最后访问时间</td>
   <td><% out.print(lastAccessTime); %></td>
</tr> 
<tr>
   <td>用户 ID</td>
   <td><% out.print(userID); %></td>
</tr> 
<tr>
   <td>访问次数</td>
   <td><% out.print(visitCount); %></td>
</tr> 
</table> 
</body>
</html>

Versuchen Sie auch http: // localhost: 8080 / testjsp / main.jsp, wird zum ersten Mal ausgeführt erhalten die folgenden Ergebnisse:

Besuchen wieder, werden wir die folgenden Ergebnisse erhalten:


Löschen von Sitzungsdaten

Nach Abschluss eines Sitzungsdaten des Benutzers verarbeiten, haben Sie folgende Möglichkeiten:

  • Entfernen Sie eine bestimmte Eigenschaft:

    Rufen public void removeAttribute (String name) Methode die angegebene Eigenschaft zu entfernen.

  • Um eine ganze Konversation zu löschen:

    Rufen public void invalidate () -Methode die gesamte Sitzung ist ungültig zu machen.

  • Einstellen von Sitzungsdauer:

    Rufen public void setMaxInactiveInterval (int Intervall) Methode, um die Session-Timeout zu setzen.

  • Anmeldung Benutzer:

    Servlet2.4 unterstützten Versionen des Servers, können Sie logout () -Methode aufrufen, um den Benutzer zu abmelden und alle damit verbundenen Sitzung ist ungültig.

  • Web.xml Konfigurationsdatei:

    Wenn Sie Tomcat verwenden, können Sie web.xml-Datei an folgende Konfiguration:

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

Time-out in Minuten, Tomcat Standard-Timeout beträgt 30 Minuten.

Servlets in getMaxInactiveInterval () Methode gibt die Timeout-Sekunden. Wenn die web.xml für 15 Minuten konfiguriert ist, dann getMaxInactiveInterval () -Methode 900 zurück.