Lösung für das zustandslose HTTP-Protokoll:
HTTP ist ein zustandsloses Protokoll. Bei zustandslosen Protokollen ist es nicht erforderlich, dass der Server über mehrere Anfragen hinweg Informationen oder Status über jeden Benutzer behält.
Aber einige Webanwendungen müssen möglicherweise den Fortschritt des Benutzers von einer Seite zur anderen verfolgen, beispielsweise wenn der Webserver den Webseiteninhalt für den Benutzer anpassen muss. Zu den Lösungen für diese Situationen gehören:
Verwendung von HTTP-Cookies.
Serverseitige Sitzung.
Versteckte Variable (wenn die aktuelle Seite ein Formular enthält)
URL-Umschreibung mit URI-codierten Parametern, zum Beispiel /index.php?session_id=some_unique_session_code.
Der Grund dafür, das Protokoll zustandslos zu machen, besteht darin, dass der Server den Status mehrerer Anfragen nicht verfolgen muss, nicht, dass er dies nicht tun kann, wenn er möchte. Dies vereinfacht den Vertrag zwischen Client und Server und minimiert in vielen Fällen (z. B. bei der Bereitstellung statischer Daten über ein CDN) die zu übertragende Datenmenge. Wenn der Server den Zustand des Client-Zugriffs aufrechterhalten muss, wird die Struktur zum Erstellen und Beantworten von Anforderungen komplexer. Tatsächlich ist die Einfachheit des Modells eines seiner größten Merkmale.
2. Erstellung von Cookies
//创建cookie Cookie cookie = new Cookie("username", "admin"); //将cookie响应到浏览器 response.addCookie(cookie);
Wie Cookies in Nachrichten dargestellt werden:
Jedes Mal, wenn der Browser danach eine Anfrage an den Server sendet, trägt er dieses Cookie und erscheint in der Anfragenachricht: Cookie: Benutzername=Administrator
Nachdem der Browser auf das Cookie geantwortet hat, wird es gespeichert im laufenden Speicher des Browsers, wenn der Browser geschlossen wird, wird der aktuelle Speicher des Browsers freigegeben, sodass die Cookies gelöscht werden. Daher beträgt die Standardgültigkeitszeit der Sitzung vom Zeitpunkt des Öffnens des Browsers bis zum Zeitpunkt des Schließens des Browsers. Wertformat, Sie müssen nur verschiedene mit demselben Schlüssel erstellen. Wenn Sie auf den Browser antworten, wird der Wert des entsprechenden Cookies überschrieben
b>Verwenden Sie cookie.setValue()
//获取浏览器发送请求所携带的所有cookie Cookie[] cookies = request.getCookies(); if(cookies != null){ for (Cookie cookie : cookies) { System.out.println(cookie.getName() + "," + cookie.getValue()); } }
5 Das Cookie
a> festgelegt werden Zeit ist eine negative Ganzzahl, es gibt keine Auswirkung, d. h. die Gültigkeitszeit. Öffnen Sie den Browser, um den Browser zu schließen.
b> Die festgelegte Gültigkeitszeit ist eine positive Ganzzahl.
Wenn die effektive Zeit größer als eine Sitzung ist, wann Der Browser wird geschlossen, die Daten im Cookie werden auf der Festplatte gespeichert. Wenn der Browser erneut geöffnet wird, werden die Daten in der Festplatte wiederhergestellt.
6. Legen Sie den effektiven Pfad des Cookies fest cookie.setPath();
Wenn das Cookie erstellt und dem Browser geantwortet wird, wird das Cookie nur beim Zugriff auf den angegebenen Pfad übertragen
1 der Sitzung
Sitzung ist eine Sitzungstechnologie, die auf dem Server erstellt und verwaltet und auf der Serverseite gespeichert wird
Sitzungsanwendungsszenarien: Aufzeichnen des Anmeldestatus des Benutzers
2 Beobachten Sie die Änderungen in der Nachricht, wenn Sie die Sitzung erhalten
Wenn in dieser Sitzung zum ersten Mal auf request.getSession() zugegriffen wird, um das Sitzungsobjekt abzurufen, wird in der Antwortnachricht ein Schlüssel angezeigt. Es handelt sich um ein JSESSIONID-Cookie
Alle Sobald eine Anfrage über den Browser an den Server gesendet wird, enthält dieser dieses JSESSIONID-Cookie
F:
Das Sitzungsprinzip?
Warum werden die gleichen Sitzungen in einer Sitzung erreicht?
Antwort:
Wenn die Sitzung über request.getSession() abgerufen wird, wird das Cookie mit dem Schlüssel JSESSIONID in der Anforderungsnachricht abgerufen.
Wenn in der Anforderungsnachricht kein Cookie mit dem Schlüssel JSESSIONID vorhanden ist dass die aktuelle Sitzung gerade begonnen hat, ist das erste Mal, dass das Sitzungsobjekt in der aktuellen Sitzung abgerufen wird. Zu diesem Zeitpunkt wird ein Sitzungsobjekt innerhalb des Servers erstellt und ein Cookie mit dem Schlüssel JSESSIONID und dem Wert einer zufälligen Folge von UUID erstellt. Anschließend wird das erstellte Sitzungsobjekt in einer vom Server verwalteten Kartensammlung gespeichert. mit der zufälligen UUID-Sequenz als Schlüssel, unter Verwendung des Sitzungsobjekts als Wert und antwortet schließlich auf das Cookie von JSESSIONID an den Browser
若请求报文中存在键为JSESSIONID的cookie,此时获取该cookie的值,即UUID随机序列,以UUID随机序列为键,从服务器所维护的map集合中就可以获取唯一的session对象
void setAttribute(String name, Object value);
Object getAttribute(String name);
void removeAttribute(String name);
session的时效指在指定时间内,若没有对session进行任何的操作,此时session会自动失效
a>通过web.xml设置,单位是分钟
<session-config> <session-timeout>30</session-timeout> </session-config>
b>通过session.setMaxInactiveInterval()设置,单位是秒
session.setMaxInactiveInterval(1800);
session.invalidate()
session的钝化指服务器关闭,但是浏览器没有关闭,此时session中的数据会被序列化到磁盘上
session的活化指服务器启动,并且浏览器仍然没有关闭,此时会将序列化到磁盘上的数据重新加载到内存中
注意:若session中存储的是实体类对象,此时若要钝化,则该实体类和该实体类的成员变量也都要实现序列化的接口
1、cookie存储在浏览器端,session存储在服务器端,因此cookie相对而言不安全
2、cookie只能存储字符串类型的键值对,session可以存储任意类型的数据,因此若存储相同的数据,cookie可能会产生大量的cookie
3、由于每次浏览器发送请求都会携带cookie,若有大量的cookie,就会造成网络负担
Das obige ist der detaillierte Inhalt vonVerwendung von Cookies und Sitzungstechnologie in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!