cookie
一、cookie概述
每个客户访问服务器都会产生一个会话对象,当在一个服务器上有多个会话时,服务器端就可以通过cookie区分不同会话对象对应的ID,cookie 就是用来记录服务器与客户端的交互信息。
cookie是servlet发送到web 浏览器的少量信息,这些信息不是特别大,一般默认为4K,这些信息由浏览器保存,然后发送回服务器。
一个cookie拥有一个名称、一个值和一个可选属性,它最核心的就是一个键值对,其他的可选属性包括注释、路径、域限定符、最大生存时间和版本号等。
Servlet 通过使用 HttpServletResponse 的 addCookie(cookie) 方法将cookie发送到浏览器,该方法将字段添加到HTTP响应头发送到浏览器。浏览器通过向HTTP请求头添加字段将 cookie 返回给 Servlet 。可使用 HttpServletResponse 的 getCookies() 方法从请求中获取 cookie 。
不同的服务器网站的不同 cookie 通过名称和路径来区分。如我们在访问百度和谷歌时,会生成不同的 cookie,这时主要是通过域限定符来区分的。
二、cookie的常用方法
1、向客户程序发送cookie
1.1、 创建cookie对象
Cookie c = new Cookie(“userId”,”landril”);
1.2、 设置最大时效,默认该cookie是存储在浏览器的内在中,用户关闭浏览器则被删除,下面的方法是将cookie存储在硬盘上。
c.setMaxAge(60*60*24);//一天,如果设置为0则是删除该cookie
1.3、 将cookie放入到HTTP响应报头,可以使用HttpServletResponse的addCookie方法,此方法不修改之前指定的Set-Cookie报头,而是创建新的报头。
response.addCookie(c);
注意:设置cookie的步骤为创建cookie对象,设置最大时效,将cookie放入响应报头,即发送到客户程序,记住一定要将cookie发送到客户程序
2、从客户端读取cookie
2.1、 调用HttpServletRequest的getCookies得到一个Cookie对象的数组
2.2、 对数组进行循环,调用cookie的getName方法,获取具体的cookie的值
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0;i
Cookie c = cookies[i];
if(“userId”.equals(c.getName())){
System.out.println(c.getValue());
}
}
}
3、cookie的常用方法
3.1、 setComment()/getComment():指定或查找与该cookie相关的注释
3.2、 setDomain()/getDomain():设置或读取该cookie适用的域
3.3、 setMaxAge()/getMaxAge():操作cookie保留的时间,多长时间后过期
3.4、 getName():读取cookie的名称
3.5、 setPath()/getPath():设置或取得cookie适用的路径
cookie.setPath(“/”);指定服务器的所有页面都应该收到该cookie
3.6、 setSource()/getSource():指定cookie是否只能通过加密连接(SSL)
默认false,表示cookie适用所有连接
3.7、 setValue()/getValue():指定或获取cookie的值
4、cookie的生命
Cookie不只是有name和value,Cookie还是“生命”。所谓生命就是Cookie在客户端的有效时间,可以通过setMaxAge(int)来设置Cookie的有效时间。
cookie.setMaxAge(-1):cookie的maxAge属性的默认值就是-1,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie就会消失。
cookie.setMaxAge(60*60):表示cookie对象可存活1小时。当生命大于0时,浏览器会把Cookie保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie也会存活1小时;
cookie.setMaxAge(0):cookie生命等于0是一个特殊的值,它表示cookie被作废!也就是说,如果原来浏览器已经保存了这个Cookie,那么可以通过Cookie的setMaxAge(0)来删除这个Cookie。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie。
三、cookie与session
不要混淆 session 和 session 实现。本来 session 是一个抽象概念,开发者为了实现中断和继续等操作,将 user agent 和 server 之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。
而 cookie 是一个实际存在的东西,http 协议中定义在 响应头中的字段。所以可以将cookie认为是 session 的一种后端无状态实现。