1、什么是Cookie
在显示生活中,当顾客在购物时,商场经常会赠送顾客一张会员卡,卡上记录用户的个人信息(姓名、手机号等)、消费额度和积分额度等。顾客一旦接受了会员卡,以后每次光临该商场时,都可以使用这张会员卡,商场也将根据会员卡上的消费记录计算会员的优惠额度和累加积分。在Web应用中,cookie的功能类似于这张会员卡,当用户通过浏览器访问Web服务器时,服务器会给客户端发送一些信息,这些信息都保存在Cookie中。这样,当该浏览器再次访问服务器时,都会在请求头中将Cookie发送给服务器,方便服务器对浏览器做出正确的响应。
服务器向客户端发送Cookie时,会在HTTP响应头字段中增加Set-Cookie响应头字段。Set-Cookie头字段中设置的Cookie遵循一定的语法格式,具体示例如下:
Set-Cookie:user = klh; Path=/;
在上述示例中,user表示Cookie的名称,klh表示Cookie的值,Path表示Cookie的属性。需要注意的是,Cookie必须以键值对的形式存在,其属性可以有多个,但这些属性之间必须用分号和空格分隔。
2、Cookie的基本使用
Cookie将用户的信息保存到客户端浏览器的一个技术,当下访问的时候,浏览器会自动携带Cookie的信息过来到服务器端
* Cookie 的基本使用
创建Cookie | new Cookie(name,value),javax.servlet.http.Cookie |
将cookie发送给浏览器 | HttpServletResponse.addCookie(javax.servlet.http.Cookie) |
接收浏览器携带的所有cookie | HttpServletRequest.getCookies() |
3、Cookie的分类
3.1、会话级别的Cookie : 默认的,关闭了浏览器Cookie就销毁了
3.2、持久级别的Cookie :需要设置有效时长的,关闭浏览器也不会销毁的Cookie
* setMaxAge(int expiry),以秒为单位的时间,超过了该时间后Cookie会自动销毁
setMaxAge(0),手动删除持久性的Cookie。(前提:path和name必须一致)
* setPath(String uri),设置Cookie的有效路径
3.3、Cookie唯一标识
domain + path + name(类似Java中 : 包 + 类名)
*domain 域名。不同的网站使用的是不同的域名,cookie就不同。
* path 路径。通过cookie.setPath(...)设置的内容
* name cookie名称。通过 new Cookie(name,...)确定的内容
4、Cookie的API
方法名 | 描述 |
getName() | 获得cookie名称 |
getValue() | 获得cookie的值 |
setMaxAge(int expiry) | 设置cookie的有效时间 * 如果没有设置,cookie只缓存浏览器缓存中,浏览器关闭,cookie删除。 * 如果没有设置有效时间,在时间范围内,cookie被写入到浏览器端,关闭浏览器下次访问仍可获得,直到过期。 |
setPath(java.lang.String.uri) | 设置cookie允许被访问的路径。设置的路径,以及子路径都被允许访问。 |