一.cookie作用
cookie是浏览器端记录信息的技术
cookie和session 都属于会话技术.
二.cookie基本操作
创建cookie:
Cookie cookie = new Cookie(String key,String value);
发送cookie:
response.addCookie(cookie);
获得cookie:
Cookie cookie = null;
Cookie[] cookies = request.getCookies();
if(cookies!=null && cookies.length>0){
for(Cookie c : cookies ){
if(c.getName().equals("remember")){
cookie = c;
}
}
}
三.cookie的细节
1>关于浏览器记住多久.
*(默认情况) 当浏览器关闭时(会话结束时)
//cookie.setMaxAge(60*60*24*7*2);//两周
//cookie.setMaxAge(-1);//(默认情况)浏览器关闭时删除cookie
//cookie.setMaxAge(0);// 用于删除cookie
2>浏览器在什么情况下发送cookie(cookie的路径问题)
*cookie的默认路径就是 发送cookie的动态资源所在的上一级路径.
*如果 cookie路径是"/cookie", 那么浏览器在访问cookie路径的所有子路径时会携带cookie.
http:/localhost:8080/cookie/BServlet 会发送
http:/localhost:8080/cookie/ABC/BCD/CServlet 会发送
http:/localhost:8080/session/AServlet 不会发送
http:/www.baidu.com/cookie/BServlet 不会发送
*cookie的默认路径就是发送cookie的资源(AServlet)所在路径
*使用代码手动控制cookie路径以及主机:
cookie.setPath("/cookie");
3> cookie中主机问题(了解)
*cookie的默认主机就是发送cookie资源所在的主机
*主机用处: 如果cookie需要发送,那么主机也必须符合.
*主机的手动控制:
理论上可以手动控制. 主机的设置不允许设置发送cookie资源所在主机以外的其他主机.
//cookie.setDomain("www.baidu.com"); //不允许
//cookie.setDomain("localhost"); // localhost => 特殊的主机 =>不能设置
cookie.setDomain(".baidu.com");//如果我们当前主机是www.baidu.com.那么这么设置是没问题的
4> cookie删除的问题
原理: 使用一个寿命为0的cookie覆盖要删除的cookie.
如何覆盖: 保证3点一致,即可覆盖=> 主机,路径,cookie的键
5> (了解的了解) 跨域(主机)共享cookie.
需求: cookie可以跨越多个主机 例如: www.baidu.com music.baidu.com 等等
操作:
1. 将cookie的主机设置为".baidu.com" => *.baidu.com主机都满足
2. 将cookie的路径设置为"/"=> 什么路径都满足
6> 使用cookie记录中文键值对问题.
原则: 响应头和请求头中不允许使用中文编码. 只能使用ISO-8859-1编码.
解决: 使用URLEncode编码,即可.
操作:
工具类(JDK提供):使用 URLEncoder.encode()方法编码
使用 URLDecoder.decode()方法解码