JavaWeb开发–cookie
什么是cookie
Web应用程序利用Cookie在客户端缓存服务器端文件,浏览器会自动保存cookie文件。Cookie是以键值对形式存储在客户端主机硬盘中,由服务器端发送给客户端,客户端再下一次访问服务器端时,服务器端可以获取到客户端Cookie缓存文件。
Cookie是由服务器端创建的,然后由服务器端发送给客户端,客户端以键值对形式存储Cookie,并标注Cookie的来源。客户端再次访问服务器端时,存储的Cookie会保存在请求协议中,服务器端可以获取上次存储的缓存文件内容。
原理
Web服务器通过在HTTP响应信息中增加Set-Cookie响应头字段将Cookie信息发送给浏览器,浏览器再次向Web服务器发送请求时,在HTTP请求消息中增加Cookie请求头字段将Cookie再回传给Web服务器。
Cookie的规范
-
Http协议提供了有关Cookie的规范
- Cookie存储的大小上限为4KB。
- 不同浏览器之间不能共用cookie文件
cookie的分类:
-
会话cookie
- 当不设置cookie的生命周期expires时,该cookie就是会话cookie
- 会话cookie是放在浏览器的内存中
- 浏览器的开启和关闭就是一次会话,会话cookie就会随着浏览器的关闭而销毁。
-
持久cookie
- 设定了它的生命周期expires
- 关闭浏览器之后,它不会销毁,直到设定的过期时间
创建和使用
- 如何创建一个cookie
Cookie cookie = new Cookie("name", "value");//创建一个cookie对象
cookie.setMaxAge(30);//设置它的生命周期 ,单位是秒
resp.addCookie(cookie);//将cookie添加到响应头
- 删除cookie
在这里插入代码片
- 发送cookie到浏览器端
resp.addCookie(cookie);//将cookie添加到响应头
- 服务器端接收cookie
//服务端接收cookie
Cookie[] cookies = req.getCookies();
//接收到的是一个cookie对象数组,遍历获取
for (Cookie cookie1 : cookies) {
System.out.println(cookie1.getName()+"\t"+cookie1.getValue());
}
-
注: Cookie过期,出现空指针
-
在浏览器端可以看到我们接受到的cookie
-
在服务器端也可以接收到:
-
cookie中的方法
1 public void setDomain(String pattern)
这个方法设置域的cookie适用,2 public String getDomain()
此方法获取域的cookie应用,3 public void setMaxAge(int expiry)
此方法设置cookie过期之前多少时间(以秒为单位)间隔。如果不这样设置,cookie将持续只对当前会话。
4 public int getMaxAge()
此方法返回的最大年龄(周期)cookie,以秒为单位指定,默认情况下,-1表示cookie将继续下去,直到浏览器关闭。
5 public String getName()
此方法返回的cookie的名称。创建后的名称不能改变。
6 public void setValue(String newValue)
此方法设置的cookie值。
7 public String getValue()
这种方法得到的cookie关联的值。
8 public void setPath(String uri) //设置cookie的作用域
设置Cookie的有效访问路径。有效路径指的是Cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着Cookie信息,否则不带Cookie信息。
如果不写setPath,则默认是当前的项目路径。9 public String getPath()
这种方法得到这个cookie的路径。10 public void setSecure(boolean flag)
这个方法设置布尔值,表示cookie是否应该只发送的加密(如SSL)连接。11 public void setComment(String purpose)
本方法规定了注释,说明一个cookie的目的。注释是非常有用的,如果在浏览器的cookie展现给用户。12 public String getComment()
此方法返回的注释,描述这个cookie用途或者为null,如果cookie没有注释。
cookie的生命周期
- 实例:
-
cookie1.setMaxAge(20);//cookie1 20秒之后过期(20秒指的是从最后一次访问的时间开始算起)
-
cookie2.setMaxAge(-1); // 关闭浏览器cookie2就消失
-
cookie2.setMaxAge(0); // 删除cookie2,将cookie2发送到浏览器的时候,浏览器存的cookie2的信息会立马过期
-