一、会话的概念
Web应用中的会话过程类似于生活中的打电话过程,它指的是一个客户端((浏览器)与Web服务器之间连续发生的一系列请求和响应过程。例如,一个用户在某网站上的整个购物过程就是“个会话。为了保存会话过程中产生的数据,在Servlet技术中,提供了两个用于保存会话数据的对象,分别是Cookie和Session。
Cookie会话技术采用的是在客户端保持HTTP状态信息的万案,是在浏览器功问Web服务器的某个资源时,由Web服务器在HTTP响应消息头中附带传送给浏览器的一个小文本又件。一旦客户端浏览器保存了某个Cookie,在以后每次访问该Web服务器时,都会在HTTP请求头中将这个Cookie回传给Web服务器。
二、注意事项
(1)一个Cookie只能标识一种信息,至少含有一个标识该信息的名称(name)和设置值(value) ;
(2)一个Web站点可以给一个浏览器发送多个Cookie;一个浏览器也可以存储多个Web站点提供的Cookie;
(3)浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
三、Cookie的传送过程示意图
四、Cookie API
五、重点方法讲解
(1)setMaxAge(int expiry)
setMaxAge(int expiry)用于设置Cookie在浏览器上保持有效的秒数。
如果设置的值为一个正整数,浏览器会将Cookie信息保存在本地硬盘中。从当前时间开始,在没有超过指定的秒数之前,这个Cookie都保持有效,并且同一台计算机上运行的该浏览器都可以使用这个Cookie信息。
如果设置值为负整数,浏览器会将Cookie信息保存在浏览器的缓存中,当浏览器关闭时,Cookie信息会被删除。
如果设置值为0,则浏览器会立即删除这个Cookie信息。
(2)setPath(String uri)
setPath(String uri)方法是针对Cookie的Path属性的。如果创建的某个Cookie对象没有设置Path属性,那么该Cookie只对当前访问路径所属的目录及其子目录有效。如果想让某个Cookie项对站点的所有目录下的访问路径都有效,应调用Cookie对象的setPath()方法将其Path属性设置为“/”。
(3)setDomain(String pattern)
setDomain(String pattern)是针对Cookie的domain属性的。domain属性用于指定浏览器访问的域。例如,传智播客的域为"itcast.cn”。设置domain属性时,其值必须以“.”开头,如domain=.itcast.cn。默认情况下,domain属性的值为当前主机名,浏览器在访问当前主机下的资源时,都会将Cookie信息发送给服务器(当前主机)。需要注意的是,domain属性的值不区分大小写。
六、Cookie的发送
(1)创建Cookie对象
public Cookie(String name, String value)
(2)设置最大时效
setMaxAge(int expiry)
(3)将Cookie放入到HTTP响应报头
发送cookie需要使用HttpServletResponse的addCookie方法,将cookie插入到一个Set-Cookie HTTP响应报头中。addCookie方法并不修改任何之前指定的Set-Cookie报头。
注:不要使用HttpServletResponse的setCookie方法。
七、Cookie的读取
(1)调用request.getCookies()方法
要获取浏览器发送来的cookie,需要调用HttpServletRequest的getCookies()方法,该方法返回一个存储Cookie对象的数组。
(2)遍历Cookie数组获取指定的Cookie
遍历存储Cookie对象的数组,调用每个Cookie的getName()方法,直到找到感兴趣的Cookie为止。