Web应用中的会话过程指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程
为保存会话过程产生的数据,Servlet提供了两个用于保存会话数据的对象,分别是Cookie和Session
1、Cookie对象
Cookie是一种会话技术,它可以将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好的进行数据交互
1.1 Cookie概述
在Web应用中,Cookie的功能类似于会员卡。即当用户访问Web服务器时,Web服务器会给用户发送一些信息(例如用户信息和商品信息),然后这些信息会保存在Cookie中。当浏览器再次访问服务器时,会在请求头中将Cookie发送给服务器,以便服务器来做出正确的响应
服务器向客户端发送Cookie时,会在HTTP响应头中增加Set-Cookie响应头字段。Set-Cookie响应头字段中设置Cookie的具体示例为:
Set-Cookie:user=itcast;Path=/;
参数:user表示Cookie的名称,itcast表示Cookie的值,Path表示Cookie的属性
Cookie必须以键值对的形式存在,会在Cookie属性可以有多个,属性之间用分号“ ; ”和空格分隔
客户端和服务器之间的传输过程大致如下:
1.2 Cookie API
为了封装Cookie信息,Servlet API提供了javax.servlet.http.Cookie类,该类包含了生成Cookie信息和提取Cookie信息的方法
Cookie类的构造方法:
public Cookie(java.lang.String name,java.lang.String value);
参数:name用于指定Cookie的名称,value用于指定Cookie的值
注意:Cookie在创建之后,名称不可更改,但值可以在创建之后更改
Cookie类的常用方法:
1、String getName()
功能:返回Cookie的名称
2、void setValue(String newValue)
功能:为Cookie设置一个新的值
3、String getValue()
功能:返回Cookie的值
4、void setMaxAge(int expiry)
功能:用于设置Cookie在浏览器客户机上保持有效的秒数
5、int getMaxAge()
功能:用于返回Cookie在浏览器客户机上保持有效的秒数
6、void setPath(String uri)
功能:用于设置该Cookie项的有效目录路径
7、void getPath()
功能:用于返回该Cookie项的有效目录路径
8、 void setDomain(String name)
功能:用于设置该Cookie项的有效域
9、String getDomain()
功能:用于返回该Cookie项的有效域
10、void setVersion(int v)
功能:用于设置该Cookie项采用的版本协议
11、int getVersion()
功能:用于返回该Cookie项采用的版本协议
12、void setComment(String purpose)
功能:用于设置该Cookie项的注解部分
13、String getComment()
功能:用于返回该Cookie项的注解部分
14、void setSecure(boolean flag)
功能:用于设置该Cookie项是否只能使用安全的协议传送
15、boolean getSecure()
功能:用于返回该Cookie项是否只能使用安全的协议传送
1、setMaxAge(int expiry)和getMaxAge()
它们用于设置和返回Cookie在浏览器上保持的有效秒数。如果设置的秒数为正整数,则浏览器会将Cookie信息保存在本地硬盘中,从当前时间开始,在没有超过指定的秒数之前,这个Cookie都会保持有效并且同一台计算机上运行的该浏览器都可以使用这个Cookie信息;如果设置的秒数为负整数,则浏览器会将Cookie信息保存在浏览器的缓存中,当浏览器关闭则Cookie会被删除;如果设置的值为0,则浏览器会立刻删除这个Cookie信息
2、setPath(String uri)和getPath()
它们是针对Cookie的Path属性。如果创建的某个Cookie对象没有设置Path属性,那么该Cookie只对当前访问路径所属的目录及其子目录有效。如果想让某个Cookie项对站点的所有目录下的访问路径都有效,应调用Cookie对象的setPath()方法将其Path属性设置为“/”
3、setDomain(String name)和getDomain()
它们是针对Cookie的domain属性,domain属性用于指定浏览器访问的域,设置domain的值必须以 “ . ” 开头。在默认情况下,domain属性的值为当前主机名,浏览器在访问当前主机下的资源时,都会将Cookie信息发送给服务器(主机)
例:传智播客的域为“itcast.cn”,则domain的值为domain=.itcast.cn
注意:domain属性的值不区分大小写