English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Cookies sind Textdateien, die auf dem Client-Rechner gespeichert werden und viele Spureninformationen speichern. Aufbauend auf Servlet-Technologie kann JSP显然提供对HTTP-Cookies Unterstützung.
Es gibt in der Regel drei Schritte, um wiederkehrende Kunden zu erkennen:
Der Server-Skript sendet eine Reihe von Cookies an den Browser. Zum Beispiel Name, Alter, ID-Nummer usw.
Der Browser speichert diese Informationen lokal, um sie für den Fall der Notwendigkeit bereitzustellen。
Wenn der Browser下一次次向服务器发送任何请求时,它会同时将这些cookie信息发送给服务器,然后服务器使用这些信息来识别用户或执行其他操作。
In diesem Kapitel werden wir Ihnen zeigen, wie Sie Cookies setzen oder zurücksetzen, wie Sie auf sie zugreifen und wie Sie sie löschen.
Die Verarbeitung von JSP-Cookies erfordert die Kodierung und Dekodierung von chinesischen Zeichen, wie folgt:
String str = java.net.URLEncoder.encode("中文", "UTF-8")-8); //Kodierung String str = java.net.URLDecoder.decode("编码后的字符串","UTF-8")-8); // Dekodierung
Cookie 通常在 HTTP 信息头中设置(尽管 JavaScript 能够直接在浏览器中设置 cookie)。在 JSP 中,设置一个 cookie 需要发送如下信息头给服务器:
HTTP/1.1 200 OK Date: Fri, 04 Feb 2015 21:03:38 GMT Server: Apache/1.3.9 (UNIX) PHP/4.0b3 Set-Cookie: name=w3codebox; expires=Friday, 04-Feb-17 22:03:38 GMT; path=/; domain=oldtoolbag.com Connection: close Content-Type: text/html
正如您看到的,Set-Cookie 信息头包含一个键值对,一个 GMT(格林尼治标准时间)时间,一个路径,一个域名。键值对会被编码为 URL。有效期域是个指令,告诉浏览器在什么时候之后就可以清除这个 cookie。
如果浏览器被配置成可存储 cookie,那么它将会保存这些信息直到过期。如果用户访问的任何页面匹配了 cookie 中的路径和域名,那么浏览器将会重新将这个 cookie 发回给服务器。浏览器端的信息头长得就像下面这样:
GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc) Host: zink.demon.co.uk:1126 Accept: image/gif, */* Accept-Encoding: gzip Accept-Language: en Accept-Charset: iso-8859-1,*,utf-8 Cookie: name=xyz
JSP 脚本通过 request 对象中的 getCookies() 方法来访问这些 cookie,这个方法会返回一个 Cookie 对象的数组。
下表列出了 Cookie 对象中常用的方法:
序号 | 方法 & 描述 |
---|---|
1 | public void setDomain(String pattern) 设置 cookie 的域名,比如 oldtoolbag.com |
2 | public String getDomain() 获取 cookie 的域名,比如 oldtoolbag.com |
3 | public void setMaxAge(int expiry) Die Gültigkeitsdauer des Cookies setzen, in Sekunden, Standard ist die Lebensdauer der aktuellen Sitzung |
4 | public int getMaxAge() Erhalten Sie die Gültigkeitsdauer des Cookies, in Sekunden, Standard ist-1 , was bedeutet, dass der Cookie bis zum Schließen des Browsers gültig ist |
5 | public String getName() Rückgabe des Namens des Cookies, der nach der Erstellung nicht mehr geändert werden kann |
6 | public void setValue(String newValue) Den Wert des Cookies setzen |
7 | public String getValue() Erhalten Sie den Wert des Cookies |
8 | public void setPath(String uri) Den Pfad des Cookies setzen, Standard ist der aktuelle Verzeichnispfad unter allen URLs, sowie alle Unterverzeichnisse dieses Verzeichnisses |
9 | public String getPath() Erhalten Sie den Pfad des Cookies |
10 | public void setSecure(boolean flag) Angabe, ob der Cookie verschlüsselt übertragen werden soll |
11 | public void setComment(String purpose) Die Beschreibung des Zwecks des Cookies setzen. Wenn der Browser den Cookie dem Benutzer zeigt, wird der Kommentar sehr nützlich sein |
12 | public String getComment() Rückgabe der Kommentare, die den Zweck des Cookies beschreiben, wenn keine Kommentare zurückgegeben werden, wird null zurückgegeben |
Die Verwendung von JSP, um einen Cookie zu setzen, umfasst drei Schritte:
(1) Ein Cookie-Objekt erstellen: Verwenden Sie den Konstruktor des Cookies, um einen Cookie-Namen und einen Wert als Parameter zu übergeben, die beide Zeichenketten sind.
Cookie cookie = new Cookie("key","value");
Bitte beachten Sie, dass der Name und der Wert keine Leerzeichen oder die folgenden Zeichen enthalten dürfen:
[ ] ( ) = , " / ? @ : ;
(2) Gültigkeitsdauer festlegen:Die Funktion setMaxAge() wird verwendet, um anzuzeigen, wie lange der Cookie (in Sekunden) gültig ist. Die folgenden Aktionen haben die Gültigkeitsdauer auf 24 Stunden.
cookie.setMaxAge(60*60*24);
(3Senden Sie den Cookie an den HTTP-Header:Verwenden Sie die Funktion response.addCookie(), um einen Cookie in den HTTP-Header der Antwort hinzuzufügen.
response.addCookie(cookie);
Der Quellcode der Datei main.jsp ist wie folgt dargestellt:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF"-8"%> <%@ page import="java.net." %>*" %> <% // Kodierung, um Chinesisch-Sperrungen zu lösen String str = URLEncoder.encode(request.getParameter("name"),"utf-8); // Setzen Sie die Cookies name und url Cookie name = new Cookie("name", str); Cookie url = new Cookie("url", request.getParameter("url")); // Setzen Sie das Ablaufdatum des Cookies24Stunden. name.setMaxAge(60*60*24); url.setMaxAge(60*60*24); // Fügen Sie Cookies in den Antwortkopf hinzu response.addCookie(name); response.addCookie(url); %> <html> <head> <title>Cookie-Einstellungen</title> </head> <body> <h1>Cookie-Einstellungen</h1> <ul> <li><p><b>Webseitenname:</b>/b> <%= request.getParameter("name") %> </p></li> <li><p><b>URL:</b>/b> <%= request.getParameter("url") %> </p></li> </ul> </body> </html>
Nachfolgend ein einfaches HTML-Formular, das die Clientendaten mit dem GET-Verfahren an die Datei main.jsp übermittelt und Cookies festlegt:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Grundlagen-Tutorial-Website(oldtoolbag.com)</title> </head> <body> <form action="main.jsp" method=GET> Seitenname: <input type="text" name="name"> <br /> URL: <input type="text" name="url" /> <input type="submit" value="Submit"> /> </form> </body> </html>
Speichern Sie den obigen HTML-Code in der Datei test.htm.
Legen Sie diese Datei in den aktuellen WebContent-Ordner des JSP-Projekts ab (im selben Verzeichnis wie main.jsp).
Durch Zugriff auf http://localhost:8080/testjsp/test.html Übermitteln Sie die Formulardaten an die Datei main.jsp, wie folgt:
Versuchen Sie, "Seitenname" und "URL" einzugeben und dann auf die Schaltfläche "Submit" zu klicken. Dies wird "Seitenname" und "URL" auf Ihrem Bildschirm anzeigen und zwei Cookies für "Seitenname" und "URL" festlegen.
Um ein Cookie zu lesen, müssen Sie die Methode request.getCookies() aufrufen, um ein Array von javax.servlet.http.Cookie-Objekten zu erhalten, und dann dieses Array durchlaufen, um mit den Methoden getName() und getValue() den Namen und den Wert jedes Cookies zu erhalten.
Lassen Sie uns die Cookies aus dem obigen Beispiel lesen, der folgende Code ist der Inhalt der Datei cookie.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF"-8"%> <%@ page import="java.net." %>*" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookie erhalten</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // Erhalten Sie die Daten der Cookies, das ist ein Array cookies = request.getCookies(); if( cookies != null ){ out.println("<h2> suchen Sie nach Cookie-Namen und -Werten</h2">); for (int i = 0; i < cookies.length; i++{ cookie = cookies[i]; out.print("Parametername: "); + cookie.getName()); out.print("<br>); out.print("Parameterwert: "); + URLDecoder.decode(cookie.getValue(), "utf-8) +"<br> out.print("------------------------------------<br> } } out.println("<h2>Kein Cookie gefunden</h2">); } %> </body> </html>
Nach dem Zugriff des Browsers wird das Ergebnis ausgegeben:
Das Löschen eines Cookies ist sehr einfach. Wenn Sie ein Cookie löschen möchten, befolgen Sie die folgenden Schritte:
Erhalten Sie ein vorhandenes Cookie und speichern Sie es im Cookie-Objekt.
Setzen Sie das Ablaufdatum des Cookies auf 0.
Fügen Sie dieses Cookie in den Header der Antwort hinzu.
Das folgende Programm löscht ein Cookie mit dem Namen "name", wenn Sie cookie.jsp zum zweiten Mal ausführen, wird "name" auf null gesetzt.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF"-8"%> <%@ page import="java.net." %>*" %> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookie erhalten</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // Erhalten Sie alle Cookies unter der aktuellen Domain, das ist ein Array cookies = request.getCookies(); if( cookies != null ){ out.println("<h2> suchen Sie nach Cookie-Namen und -Werten</h2">); for (int i = 0; i < cookies.length; i++{ cookie = cookies[i]; if((cookie.getName()).compareTo("name") == 0 ){ cookie.setMaxAge(0); response.addCookie(cookie); out.print("Löschen von Cookie: "); + cookie.getName( + "<br/">); } out.print("Parametername: "); + cookie.getName()); out.print("<br>); out.print("Parameterwert: "); + URLDecoder.decode(cookie.getValue(), "utf-8) +"<br> out.print("------------------------------------<br> } } out.println("<h2>Kein Cookie gefunden</h2">); } %> </body> </html>
Durch den Browser aufrufen, Ausgaberesultat:
Besuchen Sie erneut http://localhost:8080/testjsp/cookie.jsp, Sie erhalten das folgende Ergebnis:
Sie können sehen, dass das Cookie mit dem Namen "name" nicht mehr vorhanden ist.
Sie können auch manuell Cookies im Browser löschen. Im IE-Browser klicken Sie auf die Menüoption Werkzeuge, wählen Sie Internetoptionen aus, klicken Sie auf Löschen von Cookies, um alle Cookies zu löschen.