English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Les cookies sont des fichiers texte stockés sur le client, qui contiennent de grandes quantités d'informations de trace. Sur la base de la technologie Servlet, JSP peut évidemment fournir un soutien pour les cookies HTTP.
Il y a généralement trois étapes pour identifier les clients fidèles :
Les scripts serveur envoient une série de cookies au navigateur. Par exemple, le nom, l'âge, le numéro d'ID, etc.
Le navigateur stocke ces informations localement pour une utilisation ultérieure.
Lorsque le navigateur envoie une requête à un serveur la prochaine fois, il envoie également ces informations de cookie au serveur, puis le serveur utilise ces informations pour identifier l'utilisateur ou faire d'autres choses.
Cette section vous expliquera comment définir ou réinitialiser les cookies, comment y accéder et comment les supprimer.
Le traitement des cookies JSP nécessite l'encodage et le décodage des caractères chinois, voici la méthode :
String str = java.net.URLEncoder.encode("chinois", "UTF-8")-8); //Codage String str = java.net.URLDecoder.decode("chaine de caractères codée","UTF-8")-8); // Décodage
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) Définir la durée de validité du cookie, en secondes, par défaut, la durée de validité est la durée de vie de la session actuelle |
4 | public int getMaxAge() Obtenir la durée de validité du cookie, en secondes, par défaut :-1 Indiquer que le cookie vivra jusqu'à ce que le navigateur soit fermé |
5 | public String getName() Retourner le nom du cookie, une fois le nom créé, il ne peut pas être modifié |
6 | public void setValue(String newValue) Définir la valeur du cookie |
7 | public String getValue() Obtenir la valeur du cookie |
8 | public void setPath(String uri) Définir le chemin du cookie, par défaut pour tous les URL dans le répertoire courant et tous les sous-répertoires de ce répertoire |
9 | public String getPath() Obtenir le chemin du cookie |
10 | public void setSecure(boolean flag) Indiquer si le cookie doit être传输加密 |
11 | public void setComment(String purpose) Définir la description du commentaire indiquant l'objectif du cookie. Les commentaires deviennent très utiles lorsque le navigateur affiche le cookie à l'utilisateur |
12 | public String getComment() Retourner les commentaires décrivant l'objectif du cookie, ou null si il n'y en a pas |
Utiliser JSP pour définir un cookie implique trois étapes :
(1) Créer un objet cookie : Appeler le constructeur du cookie avec un nom et une valeur en tant que paramètres, qui sont tous deux des chaînes de caractères.
Cookie cookie = new Cookie("key","value");
Il est impératif de se souvenir que ni le nom ni la valeur ne peuvent contenir d'espaces ou des caractères tels que :
[ ] ( ) = , " / ? @ : ;
(2) Définir la durée de validité :Appeler la fonction setMaxAge() pour indiquer pendant combien de temps (en secondes) le cookie est valide. Les opérations suivantes ont fixé la durée de validité à : 24 heures.
cookie.setMaxAge(60*60*24);
(3) Envoyer le cookie à l'en-tête de réponse HTTP :Appeler la fonction response.addCookie() pour ajouter un cookie à l'en-tête de réponse HTTP.
response.addCookie(cookie);
Le code du fichier main.jsp est présenté comme suit :
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.net."*" %> <% // Encoding, résoudre les problèmes de caractères chinois malformés String str = URLEncoder.encode(request.getParameter("name"),"utf-8); // Définir les cookies name et url Cookie name = new Cookie("name", str); Cookie url = new Cookie("url", request.getParameter("url")); // Définir la durée de validité des cookies à24heures. name.setMaxAge(60*60*24); url.setMaxAge(60*60*24); // Ajouter des cookies dans l'en-tête de la réponse response.addCookie(name); response.addCookie(url); %> <html> <head> <title>Définir les cookies</title> </head> <body> <h1>Définir les cookies</h1> <ul> <li><p><b>Nom du site:</b>/b> <%= request.getParameter("name") %> </p></li> <li><p><b>URL:</b>/b> <%= request.getParameter("url") %> </p></li> </ul> </body> </html>
Voici un simple formulaire HTML qui soumet les données client au fichier main.jsp via la méthode GET et définit des cookies :
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Site de tutos de base(oldtoolbag.com)</title> </head> <body> <form action="main.jsp" method=GET> Nom du site: <input type="text" name="name"> <br /> URL: <input type="text" name="url" /> <input type="submit" value="Soumettre" /> </form> </body> </html>
Enregistrer le code HTML ci-dessus dans le fichier test.htm.
Placez ce fichier dans le répertoire WebContent du projet jsp actuel (dans le même répertoire que main.jsp).
En accédant à http://localhost:8080/testjsp/Soumettre les données du formulaire test.html au fichier main.jsp comme suit :
Essayer d'entrer "nom du site" et "URL", puis cliquer sur le bouton de soumission, il affichera "nom du site" et "URL" sur votre écran et définira deux cookies pour "nom du site" et "URL".
Pour lire un cookie, vous devez appeler la méthode request.getCookies() pour obtenir un tableau d'objets javax.servlet.http.Cookie, puis parcourir ce tableau, utiliser les méthodes getName() et getValue() pour obtenir le nom et la valeur de chaque cookie.
Lisons les cookies de l'exemple précédent, voici le code du fichier 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>Obtenir le Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // Obtenir les données des cookies, c'est un tableau cookies = request.getCookies(); if( cookies != null ) { out.println("<h2> Recherche du nom et de la valeur du Cookie/h2)"); for (int i = 0; i < cookies.length; i++} cookie = cookies[i]; out.print("Nom du paramètre: ") + cookie.getName()); out.print("<br>"); out.print("Valeur du paramètre: ") + -8) +" <br>" out.print("------------------------------------<br> } } out.println("<h2>Aucun Cookie trouvé</h2)"); } %> </body> </html>
Après l'accès du navigateur, le résultat de la sortie est :
Supprimer un cookie est très simple. Si vous souhaitez supprimer un cookie, suivez les étapes suivantes :
Obtenez un cookie existant et stockez-le dans l'objet Cookie.
Définissez la durée de validité du cookie sur 0.
Ajoutez ce cookie à nouveau dans l'entête de la réponse.
Le programme suivant supprime un cookie nommé "name", lorsque vous exécutez cookie.jsp pour la deuxième fois, name sera null.
<%@ 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>Obtenir le Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // Obtenir les cookies du domaine actuel, c'est un tableau cookies = request.getCookies(); if( cookies != null ) { out.println("<h2> Recherche du nom et de la valeur du Cookie/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("Suppression du Cookie: ") + cookie.getName( ) + "<br/)"); } out.print("Nom du paramètre: ") + cookie.getName()); out.print("<br>"); out.print("Valeur du paramètre: ") + -8) +" <br>" out.print("------------------------------------<br> } } out.println("<h2>Aucun Cookie trouvé</h2)"); } %> </body> </html>
Accédez via le navigateur, le résultat est :
Accédez à nouveau à http://localhost:8080/testjsp/cookie.jsp, vous obtiendrez le résultat suivant :
Vous pouvez voir que le cookie nommé "name" a disparu.
Vous pouvez également supprimer manuellement les cookies dans le navigateur. Dans Internet Explorer, cliquez sur l'élément Menu Outils, puis choisissez Options Internet, cliquez sur Supprimer les cookies, et vous pouvez supprimer tous les cookies.