Cookie对象
Session域对象 虽然Cookie是在使用Session的过程中出现的。其实我们本身也可以单独使用Cookie来在客户端(浏览器)来设置一些信息。
Cookie对象是通过 响应对象 写回到 浏览器的 。
- 写Cookie的功能要找 HttpServletResponse对象
Cookie信息是通过 请求对象 发送到 服务器的。
* 读Cookie内容的功能找 HttpSerlvetRequest 对象
1、写Cookie
/*
演示Cookie的写操作。
创建: 指定键、值对。
注意: 值也不能出现一些特殊的符号。 比如 逗号
写回: resp.addCookie方法。
*/
Cookie cookie = new Cookie("pids","4-2-3-5-6-7");
resp.addCookie(cookie);
Cookie cookie = new Cookie("pids","4-2-4-2-4-5");
//path的默认值就是当前项目
cookie.setPath(req.getContextPath()+"/abc");
//默认有效期起:关闭浏览器窗口就没了
cookie.setMaxAge(60); //手工设置60秒的有效期
resp.addCookie(cookie);
2、Cookie的常用设置
设置Cookie的有效期。
- 如果值为
负数
,则Cookie不存储(关闭浏览器窗口时,自动删除)。- 如果值是
0
,则删除该cookie。
单位是: 秒
/*
设置Cookie的有效期。如果值为负数,则Cookie不存储(关闭浏览器窗口时,自动删除)。
如果值是0,则删除该cookie。
单位是: 秒
*/
void setMaxAge(int expiry)
设置以秒计的cookie的最大存活时间。
int getMaxAge()
返回cookie的最大存活时间,以秒计算,在缺省情况下,-1标示该cookie将一致持续到浏览器shutdown为止。
/*
所谓的Path其实就是告诉浏览器访问哪些路径的时候,会自动携带此Cookie数据。
比如:
如果path是 / 意味着用户访问此项目下的所有路径,都会携带此Cookie。
/index.html
/abc/def.html
如果path是/admin 意味着只有访问 admin 及其子目录时,才会携带此cookie。
/index.html [不携带]
/admin/index.html [携带]
*/
void setPath(java.lang.String uri)
指定客户端将cookie返回的cookie的路径。
java.lang.String getPath()
返回服务器上浏览器返回cookie的路径。
所谓的Path其实就是告诉浏览器访问哪些路径的时候,会自动携带-此Cookie数据。
比如:
- 如果path是
/
意味着用户访问此项目下的所有路径,都会携带此Cookie。
/index.html
/abc/def.html- 如果path是
/admin
意味着只有访问 admin 及其子目录时,才会携带此cookie。
/index.html [不携带cookie]
/admin/index.html [携带]
3、Cookie读取
/*
【前提条件: 用户发送HTTP请求时,携带了Cookie信息】演示Cookie信息的读取
req 对象的 getCookies() 方法返回 Cookie[] 就是携带的所有cookie信息
我们还必须手工遍历此数组,才能获取我们关心的某个 cookie值是否存在。
*/
Cookie[] cookies = req.getCookies();
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
//获取cookie的键
if("pids".equals( cookie.getName())) {
//获取cookie的值
cookie.getValue();
break;
}
}
4、Cookie的修改和删除
if("1".equals(flag)){
// 如果你想要修改Cookie ,只要给客户端写回一个相同属性。 相同name的cookie回去即可。
//模拟Cookie的修改。
Cookie cookie = new Cookie("pids","4-2-1-5-8-7");
cookie.setPath("/0730/abc");
cookie.setMaxAge(Integer.MAX_VALUE);
resp.addCookie(cookie);
return;
}else if("2".equals(flag)){
//演示删除cookie,只要保证name一致。 maxAge 为 0 即可删除。
Cookie cookie = new Cookie("pids","222");
cookie.setPath("/0730/abc");
cookie.setMaxAge(0); //0表示告诉浏览器删除
resp.addCookie(cookie);
return;
}