Cookie 剖析
Cookies 通常设置在 HTTP 头信息中(虽然 JavaScript 也可以直接在浏览器上设置一个 Cookie)。
如果浏览器被配置为存储 Cookies,它将会保留此信息直到到期日期。如果用户的浏览器指向任何匹配该 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
Servlet 就能够通过请求方法request.getCookies()访问 Cookie,该方法将返回一个Cookie对象的数组。
Servlet Cookies 方法
1 public void setDomain(String pattern)
该方法设置 cookie 适用的域,
2 public String getDomain()
该方法获取 cookie 适用的域,。
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。
通过 Servlet 设置 Cookies
通过 Servlet 设置 Cookies 包括三个步骤:
(1) 创建一个 Cookie 对象:您可以调用带有 cookie 名称和 cookie 值的 Cookie 构造函数,cookie 名称和 cookie 值都是字符串。
Cookie cookie = new Cookie("key","value");
请记住,无论是名字还是值,都不应该包含空格或以下任何字符:
[ ] ( ) = , " / ? @ : ;
(2) 设置最大生存周期:您可以使用 setMaxAge 方法来指定 cookie 能够保持有效的时间(以秒为单位)。下面将设置一个最长有效期为 24 小时的 cookie。
cookie.setMaxAge(60*60*24);
(3) 发送 Cookie 到 HTTP 响应头:您可以使用response.addCookie来添加 HTTP 响应头中的 Cookies,如下所示:
response.addCookie(cookie);
通过 Servlet 读取 Cookies
要读取 Cookies,您需要通过调用HttpServletRequest的getCookies( )方法创建一个javax.servlet.http.Cookie对象的数组。然后循环遍历数组,并使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值。
通过 Servlet 删除 Cookies
删除 Cookies 是非常简单的。如果您想删除一个 cookie,那么您只需要按照以下三个步骤进行:
读取一个现有的 cookie,并把它存储在 Cookie 对象中。
使用setMaxAge()方法设置 cookie 的年龄为零,来删除现有的 cookie。
把这个 cookie 添加到响应头。