一 Cookie的简单实例---如何创建和添加到Servlet中
第一步:实例化一个Cookie,用来保存会话状态信息
Cookie cookie1 = new Cookie("name",name);
cookie1.setMaxAge(24*60*60);//设置一天的时间
Cookie cookie2 = new Cookie("nicknName",nickName);
第二步:将生成的Cookie对象添加到响应消息头字段中,从服务器发送给客户端
response.addCookie(cookie1);
response.addCookie(cookie2);
注:(1)在创建了Cookie之后,如果没有设置有效的日期,只存在内存中,只对当前的进程有效.设置日期的时候要注意,日期是用秒来计算的,所有必须转换为秒,格式如下:
有效日期的设置用方法:setMaxAge(24*60*60)
(2)Cookie是以键值对的形式存在的,所有初始化的时候是用键值对
二 Cookie方法的使用
1.获取对象的值和属性
cookie1.getName()
cookie1.getValue()
System.out.println(cookie1.getName()+","+cookie1.getValue());
2.设置对象的值和属性
cookie1.setValue("tom");
注:设置值之后,在地址栏上的值就是它,而且每次输出getValue()时都为空。只有在重置了域名之后,才会改变name值,并且在getValue()是输出的是设置的值,不是null。
3.设置域名
cookie1.setDomain(".csdn.com.cn");
cookie2.setDomain("localhost");
System.out.println(cookie1.getDomain()); //不为空
4.获取Cookie消息头中的值------消息头有多个,用数组
从请求对象中获取Cookie值
Cookie[] cookies = request.getCookies();
if(cookies!=null){
for(int i = 0;i<cookies.length;i++){ System.out.println(cookies[i].getName()+":"+cookies[i].getValue()+";"+cookies[i].getMaxAge()+";"+cookies[i].getDomain());
}
注:如果cookies为null,则证明是第一次创建Cookie。并且在每次创建Cookie之后,新创建的Cookie会替代旧的作为get消息头,但是响应服务器的时候是新创建的。
5.Cookie请求头字段
(1)浏览器使用Cookie请求头字段将Cookie信息回送给WEB服务器。
(2)多个Cookie信息通过一个Cookie请求头字段回送给WEB服务器。
(3)浏览器根据下面的几个规则决定是否发送某个Cookie信息:
请求的主机名是否与某个存储的Cookie的Domain属性匹配;
请求的端口号是否在该Cookie的Port属性列表中;
请求的资源路径是否在该Cookie的Path属性指定的目录及子目录中;
该Cookie的有效期是否已过。
三 实例应用--获取上次访问的时间
Cookie[] cookies = request.getCookies();
if(cookies!=null){
//通过循环遍历
for(int i = 0;i<cookies.length;i++){
//上一次的访问时间是根据名字是否相同判断的
String last = cookies[i].getName();
if("last_time".equals(last)){
out.print("你是老用户,上一次访问 时间"+cookies[i].getValue());
break;
}
}
}else{
out.print("你是第一次访问站点!");
}
注:cookies=null 表示的是第一次访问
四 注意点总结
(1)不是每次访问的Cookie都封装在请求消息中,如果在本地找不到想要访问的Cookie,就不会封装
(2)每一个Cookie都有一个domain属性 domain是URL ,即是访问的地址
(3)在发生请求之前先去本地找Cookie,如果在本地找到相同的Cookie,就封装到一个请求消息头字段,发送给服务端
(4)如果setPath()属性和setDomain属性,端口号和有效日期不过期,才会封装到消息头中并发送.
(5)域名的设置-------实现跨域的操作:
Cookie1.setDomain(.csdn.com.cn);
(6)只有在path、主机、端口、有效日期不过期的情况下,才会覆盖,要不会当成一个新的Cookie