English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
I cookie sono file di testo memorizzati sul client che contengono molte tracce di informazioni. Sulla base della tecnologia Servlet, JSP può ovviamente fornire supporto per i cookie HTTP.
Di solito ci sono tre passaggi per riconoscere i clienti di ritorno:
Il script del server invia una serie di cookie al browser. Ad esempio, nome, età, numero di identificazione, ecc.
Il browser memorizza queste informazioni sul computer locale per eventuali necessità future.
Quando il browser invia qualsiasi richiesta al server la prossima volta, invierà anche queste informazioni sui cookie al server, che li utilizzerà per riconoscere l'utente o fare altre cose.
Questa sezione ti insegnerà come impostare o ripristinare i cookie, come accedervi e come eliminarli.
Il trattamento dei cookie in JSP richiede la codifica e decodifica dei caratteri cinesi, come segue:
String str = java.net.URLEncoder.encode("cinese", "UTF-8"); // Codifica String str = java.net.URLDecoder.decode("stringa codificata", "UTF-8"); // Decodifica
I cookie vengono solitamente impostati nella intestazione dell'informazione HTTP (sebbene JavaScript possa impostare i cookie direttamente nel browser). In JSP, per impostare un cookie è necessario inviare all'hoster l'intestazione dell'informazione come segue:
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
Come vedete, l'intestazione Set-Cookie contiene un paio di chiavi e valori, un orario GMT (Greenwich Mean Time), un percorso e un dominio. Il paio di chiavi e valori viene codificato come URL. L'indicazione della durata del dominio è un comando che informa il browser quando può cancellare questo cookie.
Se il browser è configurato per memorizzare i cookie, questi verranno conservati fino alla scadenza. Se l'utente accede a qualsiasi pagina che corrisponde al percorso e al dominio del cookie, il browser invierà nuovamente questo cookie al server. L'intestazione delle informazioni del browser appare così:
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 accedono a questi cookie tramite il metodo getCookies() dell'oggetto request, che restituisce un array di oggetti Cookie.
La tabella seguente elenca i metodi comuni dell'oggetto Cookie:
Numero | Metodo & Descrizione |
---|---|
1 | public void setDomain(String pattern) Imposta il dominio del cookie, ad esempio oldtoolbag.com |
2 | public String getDomain() Ottieni il dominio del cookie, ad esempio oldtoolbag.com |
3 | public void setMaxAge(int expiry) Imposta la durata di validità del cookie in secondi, il valore predefinito è la durata di vita della sessione corrente |
4 | public int getMaxAge() Ottieni la durata di validità del cookie in secondi, il valore predefinito è -1, il che indica che il cookie rimarrà attivo fino alla chiusura del browser |
5 | public String getName() 返回 cookie 的名称,名称创建后将不能被修改 |
6 | public void setValue(String newValue) 设置 cookie 的值 |
7 | public String getValue() 获取cookie的值 |
8 | public void setPath(String uri) 设置 cookie 的路径,默认为当前页面目录下的所有 URL,还有此目录下的所有子目录 |
9 | public String getPath() 获取 cookie 的路径 |
10 | public void setSecure(boolean flag) 指明 cookie 是否要加密传输 |
11 | public void setComment(String purpose) 设置注释描述 cookie 的目的。当浏览器将 cookie 展现给用户时,注释将会变得非常有用 |
12 | public String getComment() 返回描述 cookie 目的的注释,若没有则返回 null |
使用 JSP 设置 cookie 包含三个步骤:
(1)创建一个 cookie 对象: 调用 cookie 的构造函数,使用一个 cookie 名称和值做参数,它们都是字符串。
Cookie cookie = new Cookie("key","value");
请务必牢记,名称和值中都不能包含空格或者如下的字符:
[ ] ( ) = , " / ? @ : ;
(2) 设置有效期:调用 setMaxAge() 函数表明 cookie 在多长时间(以秒为单位)内有效。下面的操作将有效期设为了 24 小时。
cookie.setMaxAge(60*60*24);
(3) 将 cookie 发送至 HTTP 响应头中:调用 response.addCookie() 函数来向 HTTP 响应头中添加 cookie。
response.addCookie(cookie);
main.jsp 文件代码如下所示:
<%@ 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)); // Imposta il tempo di scadenza del cookie a 24 ore. name.setMaxAge(60*60*24); url.setMaxAge(60*60*24); // Aggiungi cookie nella risposta header response.addCookie(name); response.addCookie(url); %> <html> <head> <title>Imposta Cookie</title> </head> <body> <h1>Imposta Cookie</h1> <ul> <li><p><b>Nome del sito:</b> <%= request.getParameter("name") %> </p></li> <li><p><b>Indirizzo del sito:</b> <%= request.getParameter("url") %> </p></li> </ul> </body> </html>
Di seguito è riportato un semplice modulo HTML che utilizza il metodo GET per inviare i dati del client al file main.jsp e impostare i cookie:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Base Tutorial Site (oldtoolbag.com)</title> </head> <body> <form action="main.jsp" method=GET> Nome del sito: <input type="text" name="name"> <br /> Indirizzo del sito: <input type="text" name="url" /> <input type="submit" value="Invia" /> </form> </body> </html>
Salva il codice HTML sopra nel file test.htm.
Posiziona il file nella directory WebContent del progetto jsp corrente (nella stessa directory di main.jsp).
Invia i dati del modulo a main.jsp tramite http://localhost:8080/testjsp/test.html, come segue:
Prova a inserire "Nome del sito" e "Indirizzo del sito" e poi clicca sul pulsante Invia, verranno visualizzati nel tuo schermo "Nome del sito" e "Indirizzo del sito", e verranno impostati due cookie per "Nome del sito" e "Indirizzo del sito".
Per leggere i cookies, bisogna chiamare il metodo request.getCookies() per ottenere un array di oggetti javax.servlet.http.Cookie, quindi esaminare l'array, usando i metodi getName() e getValue() per ottenere il nome e il valore di ogni cookie。
Vediamo come leggere i cookies dell'esempio precedente, qui è il codice del file 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> Ottenere Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // Ottenere i dati dei cookies, è un array cookies = request.getCookies(); se cookies != null ){ out.println("<h2> Ricerca Nome e Valore Cookie</h2>"); per (int i = 0; i < cookies.length; i++){ cookie = cookies[i]; out.print("Nome del parametro: " + cookie.getName()); out.print("<br>"); out.print("Valore del parametro: " + URLDecoder.decode(cookie.getValue(), "utf-8") + "<br>"); out.print("------------------------------------<br>"); } } out.println("<h2>Non è stato trovato un Cookie</h2>"); } %> </body> </html>
Dopo l'accesso del browser, i risultati di output sono:
Eliminare un cookie è molto semplice. Se vuoi eliminare un cookie, seguisci i passaggi seguenti:
Ottenere un cookie esistente e salvarlo in un oggetto Cookie.
Impostare la durata di validità del cookie a 0.
Aggiungere nuovamente questo cookie nelle risposte del header.
Il seguente programma elimina un cookie con il nome "name",quando eseguite per la seconda volta cookie.jsp,name sarà 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> Ottenere Cookie</title> </head> <body> <% Cookie cookie = null; Cookie[] cookies = null; // Ottenere i cookies del dominio corrente,è un array cookies = request.getCookies(); se cookies != null ){ out.println("<h2> Ricerca Nome e Valore Cookie</h2>"); per (int i = 0; i < cookies.length; i++){ cookie = cookies[i]; se ((cookie.getName( )).compareTo("name") == 0 ){ cookie.setMaxAge(0); response.addCookie(cookie); out.print("Elimina Cookie: " + cookie.getName() + "<br/>"); } out.print("Nome del parametro: " + cookie.getName()); out.print("<br>"); out.print("Valore del parametro: " + URLDecoder.decode(cookie.getValue(), "utf-8") + "<br>"); out.print("------------------------------------<br>"); } } out.println("<h2>Non è stato trovato un Cookie</h2>"); } %> </body> </html>
Accedi tramite il browser e l'output sarà:
Torna a visitare http://localhost:8080/testjsp/cookie.jsp e ottieni i seguenti risultati:
Vedi che il cookie chiamato "name" è scomparso.
Puoi anche eliminare manualmente i cookie nel browser. Nella versione IE, clicca su Strumenti nel menu, quindi seleziona Opzioni Internet, clicca su Elimina cookie per eliminare tutti i cookie.