Cookies 通常設置在 HTTP 頭信息中(雖然JavaScript 也可以直接在浏覽器上設置一個 Cookie)。設置 Cookie 的 Servlet 會發送如下的頭信息:
HTTP/1.1 200 OK Date: Fri, 04Feb 2000 21:03:38 GMT Server:Apache/1.3.9 (UNIX) PHP/4.0b3 Set-Cookie: name=xyz; expires=Friday, 04-Feb-0722:03:38 GMT; path=/; domain=w3cschool.cc Connection:close Content-Type:text/html
Set-Cookie 頭包含了一個名稱值對、一個GMT 日期、一個路徑和一個域。名稱和值會被 URL 編碼。expires 字段是一個指令,告訴浏覽器在給定的時間和日期之後"忘記"該 Cookie
以下是在 Servlet 中操作 Cookies 時可使用的有用的方法列表。
1 public void setDomain(String pattern)
該方法設置 cookie 適用的域,例如w3cschool.cc。
2 public String getDomain()
該方法獲取 cookie 適用的域,例如w3cschool.cc。
3 public void setMaxAge(int expiry)
該方法設置 cookie 過期的時間(以秒為單位)。如果不這樣設置,cookie 只會在當前 session 會話中持續有效。
4 public int getMaxAge()
該方法返回 cookie 的最大生存周期(以秒為單位),默認情況下,-1 表示 cookie 將持續下去,直到浏覽器關閉。
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 都會返回 cookie。
9 public String getPath()
該方法獲取 cookie 適用的路徑。
10 public void setSecure(boolean flag)
該方法設置布爾值,表示 cookie 是否應該只在加密的(即SSL)連接上發送。
11 public void setComment(String purpose)
該方法規定了描述 cookie 目的的注釋。該注釋在浏覽器向用戶呈現 cookie 時非常有用。
12 public String getComment()
該方法返回了描述 cookie 目的的注釋,如果cookie 沒有注釋則返回 null。
創建一個 Cookie 對象:
Cookie cookie = newCookie("key","value");
無論是名字還是值,都不應該包含空格或以下任何字符:
[ ] ( ) = ," / ? @ : ;
設置最大生存周期:
cookie.setMaxAge(60*60*24); //以秒為單位
添加Cookies:
response.addCookie(cookie);
刪除Cookie就是把生命周期設置為0
cookie.setMaxAge(0);
設置Cookie的使用路徑
cookie.setPath(“/sessionWeb/”); //只有contextPath為”/ sessionWeb”的程序才能訪問該cookie,參數必須以”/”結尾
設置Cookie的訪問域名
cookie.setDomain(“.google.com”); //所有以”.google.com”結尾的域名都可訪問該cookie
中文屬於Unicode編碼,在內存中占四個字符,而英文屬於ASCII字符,內存中只占兩個字符,cookie中使用Unicode字符時需要對Unicode字符進行編碼,否則會出現亂碼,編碼可以使用java.net.URLEncoder類中的方法
Cookie cookie =new Cookie( URLEncoder.encode("姓名","UTF-8"), URLEncoder.encode("張三","UTF-8") ); response.addCookie(cookie); if(request.getCookies()!= null){ for(Cookie cookie : request.getCookies()){ String name = URLEncoder.decode(cookie.getName(),"UTF-8"); String name =URLEncoder.decode(cookie.getValue(),"UTF-8"); } }