Cookies und Sitzungen sollen den Benutzerzugriffsstatus beibehalten. Einerseits soll es die Geschäftsinimpusion erleichtern und andererseits die Serverprogrammierung und die Verbesserung der Zugriffsleistung vereinfachen. Cookies sind Technologie des Kunden (dh Browser). Nach dem Einstellen von Cookies werden Cookies jedes Mal, wenn Sie den Server besuchen, die Anfrage eingereicht. Die Sitzung ist die Technologie des Servers, die Benutzerzugriffsinformationen auf dem Server speichert.
Verwenden Sie Cookies, um Informationen zu liefern. Wenn die Anzahl der Kekse zunimmt und die Anzahl der Besuche zunimmt, wird die Bandbreite, die sie verbraucht, immer größer. Bei der Verwendung von Sitzungen zum Speichern von Informationen besteht die größte Schwäche darin, dass es nicht einfach ist, zwischen mehreren Servern zu teilen.
1 Kekse
Wenn ein Benutzer mit HTTP auf den Server zugreift, gibt der Server einige Tastenwertpaarinformationen an den Client-Browser zurück und fügt diesen Daten einige Einschränkungen hinzu. Wenn der Benutzer die Einschränkungen erfüllt, bringt er beim nächsten Zugriff auf den Server die Kochinformationen des Cookie-Schlüsselwerts zuvor. Wenn der Benutzer eine URL betritt, sucht der Browser nach den Cookies, die der URL auf der lokalen Festplatte zugeordnet sind. Wenn der Cookie existiert, sendet der Browser das Cookie zusammen mit der Seitenanfrage an Ihre Website.
Cookies sind mit Websites verbunden, nicht mit bestimmten Seiten. Unabhängig davon, auf welcher Seite der Browser und Server auf der Website Cookie -Informationen austauschen. Wenn ein Benutzer verschiedene Websites besucht, kann jede Website ein Cookie an den Browser des Benutzers senden. Der Browser speichert alle Kekse separat.
Cookie Attributelement
Derzeit gibt es 2 Versionen von Cookies, Version 0 und Version 1. Sie haben 2 Arten von Response-Header-Identifikatoren, nämlich "Set-Cookie" und "Set-Cookie2".
Cookie 0 -Attributwert
Cookie 1 Attributwert
Beispiel für die Verwendung von Cookies in Java
@Overridepublic void dagget (httpServletRequest-Anforderung, httpServletResponse-Antwort) löst ioException {response.setContentType ("text/html; charset = utf-8"); printwriter out == null) {response.addcookie (neuer Cookie ("Name", "luoxn28"); (Cookie.getName (). Equals (Schlüssel)) {return Cookie.getValue ();}}} return null;}Einige Vorsichtsmaßnahmen für die Verwendung von Cookies (als Beispiel Java -Nutzung einnehmen)
• Der Name und der Wert des erstellten Cookies können nicht-assische Zeichen sein. Wenn es Chinesisch ist, kann es durch rrlencoder codiert werden, sonst wird eine Ausnahme von Java.lang.IillegalargumentException ausgelöst.
• Wenn mehrere Namen und Wertwerte angezeigt werden, befinden sie sich tatsächlich im gleichen "Cookie" -Header.
• Der Wert von Cookies kann Interpunktionsmarken als "" "retten. Aber chinesische Charaktere können nicht gerettet werden. Müll wird beim Speichern chinesischer Charaktere erscheinen.
Einige Einschränkungen für Cookies
Ein Cookie ist ein Feld im HTTP -Header. HTTP selbst hat keine Einschränkungen auf diesem Gebiet, aber im Browser werden schließlich Cookies gespeichert. Verschiedene Browser haben einige Einschränkungen für die Speicherung von Cookies, wie in der folgenden Tabelle gezeigt:
Wenn Sie versuchen, mehr Kekse aufzubewahren, werden die ältesten Kekse verworfen.
2 Sitzung
Die Sitzung löst das Problem, dass die Anzahl der Datenübertragungen zwischen dem Client und dem Server erhöht wird, wenn die Anzahl der Cookies zunimmt. Wenn derselbe Client mit dem Server interagiert, muss nicht jedes Mal alle Cookie -Werte zurückgeben, sondern nur ein ID -Wert wird zurückgegeben. Diese ID wird generiert, wenn der Client zum ersten Mal auf den Server zugreift und jeder Client eindeutig ist. Diese ID ist normalerweise ein Keks, dessen Name JSESSIONID ist.
Wie funktioniert Sitzung basierend auf Cookies? Es kann auf dem URL -Pfadparameter basieren; Es kann auch auf Cookies basieren. Wenn das Cookies -Logo im Kontextbehälter nicht geändert wird, wird es standardmäßig ebenfalls unterstützt. Wenn der Browser die Cookie -Funktion nicht unterstützt, schreibt der Browser den SessionCookImename des Benutzers in den vom Benutzer angeforderten URL -Parameter um. Die Liefermethode lautet wie /path /servlet; name = xxx; name2 = xxx2? Name3 = xxx3. SessionCookImename Wenn das Session-Config-Konfigurationselement in web.xml konfiguriert ist, ist das Namensattribut unter der Cookie-Config der Wert dieses SessionCookImename. Wenn das Konfigurationselement der Sitzung-Konfiguration nicht konfiguriert ist, ist das Standard-Session-CookIenamejiushi "jsessionId". Beachten Sie, dass sich die mit der Sitzung verbundenen Cookies nicht von anderen Cookies unterscheiden. Wenn der Kunde auch Cookies unterstützt, analysiert Tomcat die Sitzungs -ID weiterhin im Cookie und überschreibt die Sitzungs -ID in der URL.
Wie die Sitzung funktioniert
Mit der Sitzungs -ID kann der Server ein HTTPSession -Objekt erstellen. Das erste Mal, dass Sie die Anfrage anrufen. GetSession () Methode. Wenn es kein entsprechendes HTTPSession -Objekt gibt, wird ein neues Objekt erstellt und dem Sitzungscontainer von org.apache.catalina.Manager gespeichert. Verwalten Sie rettet alle Sitzungslebenszyklen, die Sitzung läuft ab und wird recycelt, der Server ist geschlossen und die Sitzung ist auf Festplatte serialisiert. Beachten Sie, dass ein Client einem Sitzungsobjekt entspricht, das den von uns erstellten Sitzungswert speichert.
Die von der Request.GetSession () -Methode aufgerufene Standardsuierung besteht immer, auch wenn die mit diesem Client zugeordnete Sitzung abgelaufen ist. Wenn es abläuft, wird ein neuer erstellt, aber der zuvor festgelegte Sitzungswert geht verloren.
3 Vergleich von Cookies und Sitzungssicherheit
Cookies übergeben die gespeicherten Daten vom Client über den HTTP -Header und dann vom Server zum Client an den Server. Alle Daten werden im Client -Browser gespeichert. Diese Daten können zugegriffen werden, und auf Cookies können sogar durch Plug-Ins hinzugefügt und geändert werden. Die Sicherheit aller Cookies ist relativ schlecht. Im Vergleich dazu speichert Sitzung Daten auf der Serverseite, was viel sicherer ist. Es erfordert nur ein Cookie, eine Cookie -ID zurückzugeben, sodass die Sitzung besser zum Speichern von Privatsphäre und wichtigen Daten des Benutzers geeignet ist.
Verteilter Sitzungsrahmen
In großen Internetanwendungen ist die Verwendung von Cookies und Sitzungen allein nicht machbar, da die Verwendung von Cookies das verteilte Bereitstellungsproblem der Anwendungen gut lösen kann. Ein großes Internet -Anwendungssystem verfügt über Hunderte von Maschinen und viele verschiedene Anwendungssysteme arbeiten zusammen. Da Cookies Daten im Browser des Benutzers speichern, werden jedes Mal, wenn der Benutzer besucht, die Daten zum Server zurückgebracht, was das Problem der Cookies -Inkonsistenz löst, die durch die Anfragen desselben Benutzers auf verschiedenen Servern verarbeitet werden.
Da die Anwendung ein Cluster ist, kann die Sitzung nicht im Speicher jedes Servers gespeichert werden. Wenn jeder Server Hunderttausende von Zugriffsnutzern hat, kann der Serverspeicher nicht berücksichtigt werden. Selbst wenn es untergebracht werden kann, kann es nicht garantieren, dass die Sitzung mit anderen Servern synchronisiert wird. Das Teilen dieser Sitzungen erfordert daher das Speichern in einem speziellen verteilten Cache, der jederzeit gelesen und geschrieben werden kann. Die Leistung muss gut genug sein, um die Anforderungen wie Memcache/Redis oder Taobaos Open Source Distributed Framework Tair zu erfüllen.
Wiederholte Frage der Formulareinreichung
Es gibt viele Orte auf der Website, die die Einreichungen wiederholt haben. Um wiederholte Einreichungen von Formularen zu verhindern, müssen jede Zugriffsanforderung des Benutzers identifiziert werden, damit jede Zugriffsanforderung für den Server eindeutig ist. Um jede Anfrage des Benutzers zu identifizieren, kann ein verstecktes Formularelement zu dem vom Benutzer angeforderten Formularfeld hinzugefügt werden, und sein Wert ist eine eindeutige Token, wie z. B.:
<form id = "Form" methode = "post"> ... <Eingabe type = hidden name = "token" value = "xxx"/> </form>
Eine eindeutige Token wird generiert, wenn der Benutzer das Formular anfordert und auf die Sitzung des Benutzers festgelegt wird. Wenn sich der Benutzer einreicht, prüft er, ob das Token mit dem in der Sitzung gespeicherten Token übereinstimmt. Wenn es konsistent ist, bedeutet dies, dass es keine wiederholte Einreichung gibt. Gleichzeitig wird das Token in der Sitzung auf einen neuen Token -Wert aktualisiert. Andernfalls ist das vom Benutzer eingereichte Token nicht mehr der Rechtsmarke der aktuellen Anfrage, und die Einreichung schlägt fehl.
Die oben genannten Dinge sind die Dinge über Cookies und Sitzungen in Java, die der Herausgeber Ihnen vorgestellt hat. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!