Gestion des cookies JSP


Les cookies sont des fichiers texte stockés sur l'ordinateur client. Ils enregistrent une grande quantité d'informations sur la trajectoire. Basé sur la technologie des servlets, JSP peut évidemment prendre en charge les cookies HTTP.

Il y a généralement trois étapes pour identifier les clients réguliers :

  •        Le script du serveur envoie une série de cookies au navigateur. Tels que le nom, l'âge, le numéro d'identification, etc.

  • Le navigateur stocke ces informations localement sur l'ordinateur au cas où cela serait nécessaire.

  • La prochaine fois que le navigateur enverra une requête au serveur, il enverra également ces informations de cookie au serveur, puis le serveur utilisera ces informations pour identifier l'utilisateur ou faire d'autres choses.

Cette section vous apprendra comment paramétrer ou réinitialiser les cookies, comment y accéder et comment les supprimer.

Le traitement des cookies JSP nécessite un encodage et un décodage du chinois, la méthode est la suivante :

String   str   =   java.net.URLEncoder.encode("中文");            //编码
String   str   =   java.net.URLDecoder.decode("编码后的字符串");   // 解码

Analyse des cookies

Les cookies sont généralement définis dans les en-têtes HTTP (bien que JavaScript puisse définir des cookies directement dans le navigateur). En JSP, la configuration d'un cookie nécessite d'envoyer l'en-tête d'information suivant au serveur :

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=php; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=php.cn
Connection: close
Content-Type: text/html

Comme vous pouvez le constater, l'en-tête d'information Set-Cookie contient une paire clé-valeur, une heure GMT (Greenwich Mean Time), et un chemin. Les paires clé-valeur seront codées sous forme d'URL. Le champ de date d'expiration est une instruction qui indique au navigateur après quel délai il peut effacer ce cookie.

Si votre navigateur est configuré pour stocker des cookies, il enregistrera ces informations jusqu'à leur expiration. Si une page visitée par l'utilisateur correspond au chemin et au nom de domaine indiqués dans le cookie, le navigateur renverra le cookie au serveur. L'en-tête d'information côté navigateur ressemble à ce qui suit :

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

Le script JSP accède à ces cookies via la méthode getCookies() dans l'objet request, qui renvoie un tableau d'objets Cookie.


Méthodes des cookies des servlets

Le tableau suivant répertorie les méthodes couramment utilisées dans les objets Cookie :

Numéro de série Méthode & Description
1public void setDomain (Modèle de chaîne)


Définissez le nom de domaine du cookie, tel que w3cschool.cc
2chaîne publique getDomain()


Obtenez le nom de domaine du cookie, tel que w3cschool.cc
3public void setMaxAge(int expiration)


Définissez la période de validité des cookies en secondes. La période de validité par défaut est la durée de survie de la session en cours
4public int getMaxAge()


Obtenez la période de validité du cookie, en secondes, la valeur par défaut est -1, indiquant que le cookie restera en vie jusqu'à la fermeture du navigateur
5chaîne publique getName()


Renvoie le nom du cookie. Le nom ne peut pas être modifié après sa création
. 6public void setValue(String newValue)


Définir la valeur du cookie
7chaîne publique getValue()


Obtenez la valeur du cookie
8public void setPath(String uri)


Définissez le chemin du cookie, qui correspond par défaut à toutes les URL du répertoire de la page actuelle, ainsi qu'à tous les sous-répertoires de ce répertoire
9chaîne publique getPath()


Obtenez le chemin du cookie
                        10public void setSecure(drapeau booléen)


Indiquez si le cookie doit être crypté pour la transmission
                  11public void setComment (Objectif de la chaîne)


Définir un commentaire décrivant la finalité du cookie. Les annotations deviendront très utiles lorsque le navigateur affichera le cookie à l'utilisateur
                     12chaîne publique getComment()


Renvoie un commentaire décrivant la finalité du cookie, ou null s'il n'y en a pas

Utiliser JSP pour définir des cookies

Utiliser JSP pour définir des cookies implique trois étapes :

(1) Créer un objet Cookie : Appeler le constructeur Cookie , en utilisant un nom et une valeur de cookie comme paramètres, qui sont tous deux des chaînes.

Cookie cookie = new Cookie("key","value");

N'oubliez pas que ni le nom ni la valeur ne peuvent contenir d'espaces ou les caractères suivants :

[ ] ( ) = , " / ? @ : ;

(2) Définissez la période de validité : Appelez setMaxAge() fonction pour indiquer au cookie combien de temps (en secondes) il est valide. L'opération suivante fixe la période de validité à 24 heures.

cookie.setMaxAge(60*60*24);

(3) Envoyer un cookie à l'en-tête de réponse HTTP : Appelez la fonction réponse.addCookie() pour ajouter un cookie à l'en-tête de réponse HTTP.

response.addCookie(cookie);

Exemple de démonstration

Le code du fichier main.jsp est le suivant :

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.net.*" %>
<%
   // 编码,解决中文乱码   
   String str = URLEncoder.encode(request.getParameter("name"),"utf-8");  
   // 设置 name 和 url cookie 
   Cookie name = new Cookie("name",
		   str);
   Cookie url = new Cookie("url",
			  request.getParameter("url"));

   // 设置cookie过期时间为24小时。
   name.setMaxAge(60*60*24); 
   url.setMaxAge(60*60*24); 

   // 在响应头部添加cookie
   response.addCookie( name );
   response.addCookie( url );
%>
<html>
<head>
<title>设置 Cookie</title>
</head>
<body>

<h1>设置 Cookie</h1>

<ul>
<li><p><b>网站名:</b>
   <%= request.getParameter("name")%>
</p></li>
<li><p><b>网址:</b>
   <%= request.getParameter("url")%>
</p></li>
</ul>
</body>
</html>

Ce qui suit est un simple formulaire HTML qui soumet les données du client au fichier main.jsp , et définissez le cookie :

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>php中文网(php.cn)</title>
</head>
<body>

<form action="main.jsp" method=GET>
站点名: <input type="text" name="name">
<br />
网址: <input type="text" name="url" />
<input type="submit" value="提交" />
</form>

</body>
</html>

Enregistrez le code HTML ci-dessus dans le fichier test.htm.

Placez ce fichier dans le répertoire WebContent du projet jsp en cours (le même répertoire que main.jsp).

Envoyez les données du formulaire au fichier main.jsp en visitant http://localhost:8080/testjsp/test.html Le Gif de démonstration est le suivant :

<🎜. >

Essayez de saisir « nom du site » et « adresse Web », puis cliquez sur le bouton Soumettre, il affichera « nom du site » et « adresse Web » sur votre écran, et définirez à la fois « nom du site » et « Web ». cookies d'adresse.


Utilisez JSP pour lire les cookies

Pour lire les cookies, vous devez appeler la méthode request.getCookies() pour obtenir un tableau d'objets javax.servlet.http.Cookie. parcourez ce tableau et utilisez les méthodes getName() et getValue() pour obtenir le nom et la valeur de chaque cookie.

<h3 exemple de démonstration< h3="">

Lisons le cookie dans 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>获取 Cookie</title>
</head>
<body>
<%
   Cookie cookie = null;
   Cookie[] cookies = null;
   // 获取cookies的数据,是一个数组
   cookies = request.getCookies();
   if( cookies != null ){
      out.println("<h2> 查找 Cookie 名与值</h2>");
      for (int i = 0; i < cookies.length; i++){
         cookie = cookies[i];
        
         out.print("参数名 : " + cookie.getName());
         out.print("<br>");
         out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }else{
      out.println("<h2>没有发现 Cookie</h2>");
  }
%>
</body>
</html>

Après l'accès au navigateur, le résultat de sortie est :

C6A7341F-029A-4244-8B38-BE010E391091.jpg


Suppression des cookies à l'aide de JSP

La suppression des cookies est très simple. Si vous souhaitez supprimer un cookie, suivez simplement les étapes indiquées ci-dessous :

  • Récupérez un cookie existant et stockez-le dans l'objet Cookie.

  • Fixez la date d'expiration du cookie à 0.

  • Ajoutez à nouveau ce cookie à l'en-tête de réponse.


Exemple de démonstration

Le programme suivant supprime un cookie nommé "name". Lorsque vous exécutez cookie.jsp pour la deuxième fois, le nom sera nul.

<%@ 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</title>
</head>
<body>
<%
   Cookie cookie = null;
   Cookie[] cookies = null;
   // 获取当前域名下的cookies,是一个数组
   cookies = request.getCookies();
   if( cookies != null ){
	  out.println("<h2> 查找 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("删除 Cookie: " + 
            cookie.getName( ) + "<br/>");
         }
         out.print("参数名 : " + cookie.getName());
         out.print("<br>");
         out.print("参数值: " + URLDecoder.decode(cookie.getValue(), "utf-8") +" <br>");
         out.print("------------------------------------<br>");
      }
  }else{
	  out.println("<h2>没有发现 Cookie</h2>");
  }
%>
</body>
</html>

est accessible via le navigateur, le résultat de sortie est :

C6A7341F-029A-4244-8B38-BE010E391091.jpg

Visitez http://localhost:8080/testjsp/cookie.jsp à nouveau, vous obtiendrez les résultats suivants :

7BF1C669-F7A4-4245-B7B0-B79BBB272604.jpg

Vous pouvez constater que le cookie nommé width="70%" "name" a disparu.

Vous pouvez également supprimer manuellement les cookies dans votre navigateur. Dans le navigateur IE, vous pouvez supprimer tous les cookies en cliquant sur l'élément de menu Outils, puis en sélectionnant Options Internet et en cliquant sur Supprimer les cookies.