Sitzungssitzung Einführung
Eine Sitzung bezieht sich auf den Interaktionsprozess zwischen einem Benutzer, der denselben Browserprozess über einen bestimmten Zeitraum verwendet.
Die Sitzungen werden normalerweise verwendet, um den Status des Benutzers zu verfolgen und die Informationen des Benutzers in diesem Browserprozess zu speichern.
Wenn der Benutzer den Browser schließt, kann die vorherige Sitzung nicht erneut erhalten werden (der Fall, in dem die Maxage des Cookies -1 beträgt). Öffnen Sie erneut einen neuen Browser und eine neue Sitzung wird beginnen.
Klasse javax.servlet.http.httpSession. Jede HTTPSession repräsentiert eine Sitzung des Benutzers.
Die Ablaufzeit jeder Sitzung beträgt standardmäßig 30 Minuten.
Wenn der Browser zum ersten Mal auf den Server zugreift, unabhängig davon, auf welcher Seite er zuerst besucht wird, weist der Server dem Benutzer eine eindeutige Sitzungskennung zu, dh jsessionID und gibt es dann dem Benutzer in Form eines Cookies zurück.
Die folgende Abbildung ist ein Antwortheader (die folgende Abbildung basiert auf Servlet 3.0, und es gibt kein Httponly -Attribut in Servlet 2.5).
Der Server erstellt eine Sitzung für jeden Benutzer, nämlich das HTTPSession -Objekt, und speichert sie auf der Serverseite.
Wenn der Benutzer also erneut auf den Server zugreift, woher weiß der Server oder den aktuellen Benutzer?
Wenn der Browser erneut auf den Server zugreift, wird ein Cookie mit JSESSISID enthält, um auf den Server zuzugreifen. Der Server gibt das HTTPSession -Objekt dieses Benutzers basierend auf dieser ID zurück und verwaltet die Sitzung.
(Ist es also möglich, dieselbe Sitzung auf verschiedenen Browsern zu implementieren?
Hier ist eine typische URL, die einen bestimmten Spoofing -Effekt hat und dieselbe Sitzung in verschiedenen Browsern implementieren kann:
http: // localhost: 8080/tag07_2/cncookieServlet; jsessionId = f8692d61cd46d094dbb7a8fc7387649c)
Die Beziehung zwischen dem Browser und dem Server lautet wie folgt:
HttpSession:
In einem Servlet wird das Sitzungsobjekt über die HTTPServletRequest.GetSession -Methode erhalten.
Die folgenden Methoden der HTTPSession-Schnittstelle werden verwendet, um Daten für Sitzungsweite zu teilen:
getAtTribute ("name") setAttribute ("Name", Objekt); getAtTributenames () removeAttribute ("Name")Ungültig (); - Diese Methode löscht die von Server zwischengespeicherte Sitzung stark.
Beispiel:
Setattribute in der httpSession eines Servlets.
Gehen Sie über Hyperconnect zu einem anderen Servlet oder auf andere Weise und zeigen Sie die Informationen über GetAttribute an.
Rufen Sie GetArttribute in einem beliebigen Servlet an, um Informationen anzuzeigen.
Schließen Sie diesen Browser und besuchen Sie das Servlet, das Informationen erhält, und Sie werden feststellen, dass es keine Informationen mehr gibt.
wie folgt:
String name = request.getParameter ("Name"); Request.SetAttribute ("Name", "Anfrage ---"+Name); Request.GetSession (). setAttribute ("Name", "Sitzung ---"+Name); getServletContext (). setAttribute ("Name", "Anwendung-"+Name); Die eindeutige Kennung der Sitzung:
Jede Sitzung hat eine eindeutige Kennung, nämlich eine ID.
Wenn der Browser eine neue Sitzung erhält, kann der Benutzer den ID -Wert über Session.geid () ausdrucken.
Ohne den Browser zu schließen, springen Sie auf mehreren Seiten mit derselben Sitzung.
wie:
Request.GetSession (). getId ()
Was ist sicherer Ausgang:
Wenn ein Benutzer ausgeht, sollte er seine Informationen aus der Sitzung löschen - dh beenden sicher.
Sichere Beenden müssen die Informationen löschen, die Sie auf dem Server lassen, um zu verhindern, dass er gehackt wird.
Session.invalidate ();
1. Request.GetSession (). Invalidate ();
Auf diese Weise können die entsprechenden Objekte im Sitzungspool gelöscht werden.
2. Session.removeAttribute (…)
wie:
request.getSession (). removeTtribute ("realcode");
Wird verwendet, um Attribute in Sitzungsobjekten zu löschen
Verfolgen Sie die Sitzung, indem Sie die URL neu schreiben:
Wie bereits erwähnt, speichert der Servlet -Container zunächst eine Sitzung auf dem Client. Später, wenn der Browser eine HTTP -Anfrage ausfragt, enthält er diese Sitzung. Der Servlet -Container liest die Sitzung in der HTTP -Anforderung und nimmt das HTTPSession -Objekt aus dem Container basierend auf dieser SitzungsID heraus, um die Nachverfolgung zu erleichtern, zu der die HTTP -Anforderung gehört. Dieser Prozess wird als Sitzungsverfolgung bezeichnet.
Wenn der Browser Cookies unterstützt, speichert der Servlet -Container die Sitzung als Cookie auf dem Kunden des Browsers. Aber wenn der Benutzer Cookies aus Sicherheitsgründen deaktiviert, wie kann der Servlet -Container die Sitzung verfolgen?
Lassen Sie uns zunächst Cookies in IE deaktivieren (Hinweis: Es funktioniert nicht für einige Geistersysteme).
IE> Tools> Internetoptionen> Privatsphäre> Erweitert und deaktivieren Sie dann Cookies:
Wir können der Homepage einen solchen Hyperlink hinzufügen: (Ich habe den Code in Bezug auf SaveServlet.java getServlet.java logoutServlet.java logoutServlet.java im folgenden Code gesetzt)
<h2> Demonstrieren Sie die Umschreiben der URL-Technologie ---- Das Problem, dass unsere Sitzung ungültig ist, nachdem der Benutzer Cookies deaktiviert. href = "< %= response.encodeurl (" getServlet ") %>"> Schreiben Sie die URL-RES-Daten in mehreren Containern um </a> <br/> <a href = "< %= response.encodeurl (" LogoutServlet ") %>"Dieser Satz <form action = "<%= response.codeurl ("/aa ")%>"> kann diese Funktion realisieren
Nach dem Deaktivieren von Cookies hier kann der Browser immer noch vom Server gesendete Cookies empfangen, der Browser kann sie jedoch nur akzeptieren und kann sie nicht an den Server senden. Wenn die Cookies nicht gesendet werden können, kann sie nicht zum Sitzungspool gehen, um das entsprechende Objekt zu erhalten.
Gehen Sie nach dem Eingeben des gewünschten Werts in das Formular zum Hyperlink im GetServlet unten, um festzustellen, ob der Eingangswert weiterhin angezeigt werden kann. Die Antwort lautet ja. Der Zugriffspfad hier ist ähnlich
http: // localhost: 8080/day07_2/cncookieServlet; jSessionId = f8692d61cd46d094dbb7a8fc7387649c, das jSessionId = f8692d61cd46d094dbb7a8fc7aNfc7aNfc7aN. Auf diese Weise können Sie darauf zugreifen, indem Sie diese URL in einem anderen Browser eingeben.
Hier möchte ich hinzufügen: (Die folgende Situation ist, dass beim Schreiben des HttpSession -Objekts in den Sitzungspool der JSESSIONID -Wert und der Wert der entsprechenden Sitzung in den Cookie. Dieser Cookie überschreibt die vom System erstellte, die dem System erstellt wurde. Dies entspricht dem entsprechenden Equivalent.
In beiden Fällen, ob Cookies deaktiviert sind, sind die IDs neu erstellter Objekte im Sitzungspool unterschiedlich. Das heißt, wenn Sie einen Wert eines Namens in das Formular eingeben, wenn Cookies deaktiviert sind, lautet das Abfrageergebnis wie folgt:
Und jsessionID ist 2BB51EBDEAF14D19656C71E1B6F9FF6
Wechseln Sie dann sofort in den Cookie -Modus, ohne ihn zu deaktivieren, geben Sie einen anderen Namen wie Tom ein, und das Abfrageergebnis ist natürlich zwei Tom, und JSESSIONID ist
203F9E4DB5D874476B81DAF350661B6A, was sich von der Behinderung unterscheidet, wodurch die folgenden Ergebnisse angezeigt werden.
Zu diesem Zeitpunkt schließen wir den Browser, betreten Sie den Browser erneut und sehen Sie sich die Zugriffsergebnisse an, ohne den Cookie -Modus zu deaktivieren, wie folgt:
Ich werde den Hauptcode unten veröffentlichen:
SaveServlet.java
Paket cn.hncu.servlets.Session; importieren java.io.ioException; Import Java.io.printwriter; importieren javax.servlet.servletException; import Javax.servlet.http.cookie; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpServletResponse; öffentliche Klasse SaveServlet erweitert HttpServlet (public void dodget (httpServletRequest Request, httpServletResponse -Antwort). } public void dopost (httpServletRequest-Anforderung, httpServletResponse-Antwort) löst ServletException aus, iOException {response.setContentType ("text/html; charset = utf-8"); Printwriter out = response.getWriter (); request.setcharactercoding ("utf-8"); String name = request.getParameter ("Name"); Request.SetAttribute ("Name", "Anfrage ---"+Name); Request.GetSession (). setAttribute ("Name", "Sitzung ---"+Name); getServletContext (). setAttribute ("Name", "Anwendung-"+Name); // Ein Beispiel für die Kombination von Cookie -Technologie und Sitzungstechnologie für die Anwendung -※ Funktion: Nach dem Schließen des Browsers kann sich der Benutzer innerhalb von 10 Minuten auf dieser Website anmelden, er kann auch auf die Informationen in der Sitzung zugreifen // Schreiben Sie einen Cookie mit einem Schlüssel "jsessionID" und Wert als Sitzung für den Kunden. Cookie C = New Cookie ("JSESSIONID", Request.GetSession (). GetId ()); C.SetMaxage (60*10); // Das obige Phänomen wird durch diesen Satz verursacht. Ohne diesen Satz wird es kein solches Phänomen geben, wie oben erwähnt C.SetPath (Request.GetContextPath ()); response.addcookie (c); out.println ("erfolgreich speichern ..."); out.flush (); out.close (); }}GetServlet.java
Paket cn.hncu.servlets.Session; importieren java.io.ioException; Import Java.io.printwriter; importieren javax.servlet.servletException; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpServletResponse; Public Class GetServlet erweitert HttpServlet (public void dodget (httpServletRequest request, httpServletResponse-Antwort). Printwriter out = response.getWriter (); out.println ("<! docType html public/"-// w3c // dtd html 4.01 transitional // en/">"); out.println ("<html>"); out.println ("<kopf> <titels> a servlet </title> </head>"); out.println ("<body>"); String reqname = (string) request.getAttribute ("name"); String sename = (String) request.getSession (). GetAtTribute ("Name"); String appname = (String) getServletContext (). GetAtTribute ("Name"); out.println (reqname+"<br/>"); out.println (sename+"<br/>"); out.println (AppName+"<br/>"); out.println ("</body>"); out.println ("</html>"); out.flush (); out.close (); }}LogoutServlet.java
Paket cn.hncu.servlets.Session; importieren java.io.ioException; Import Java.io.printwriter; importieren javax.servlet.servletException; import Javax.servlet.http.httpServlet; importieren javax.servlet.http.httpServletRequest; importieren javax.servlet.http.httpServletResponse; Public Class LogoutServlet erweitert HttpServlet (public void dodget (httpServletRequest Request, httpServletResponse-Antwort). Printwriter out = response.getWriter (); // Safer Exit --- solange das Sitzungsobjekt ungültig ist. GetSession (). Invalidate (); out.println ("Safe Exit ..."); }}Das obige ist das von dem Herausgeber vorgestellte Javaweb -Sitzungs -Sitzungsmanagement. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht. Der Herausgeber wird Ihnen rechtzeitig antworten!