(建议先了解session的实现原理)
1.Cookie怎么生成
session的实现原理中,每一个session对象都会关联一个sessionid,采用name=value的形式,如:
JSESSIONID=123456789abcdef。
- 以上这个键值对其实就是cookie对象,而对于session关联的cookie来说,这种cookie是被保持在浏览器的运行内存当中
- 只要浏览器不关闭,用户再次发送请求的时候,会自动将运行内存当中的cookie发送给服务器。
- 而服务器接收到cookie对象的时候,就是根据其存储的SESSIONID来找到对应的session对象。
- HTTP协议中规定:任何一个cookie都是name和value组成的,两者都是字符串类型的数据。
- 浏览器的第一个cookie对象是由服务器端生成并发送到浏览器的
2.Cookie的保持位置
- cookie最终是保存在浏览器客户端上的
1.可以保存在内存当中(浏览器只要关闭ccokie对象就会消失)
2.可以保存在硬盘文件当中(只要不手动清除会永久保存)
3.Cookie的作用
- cookie和session机制都是为了保存会话的状态
- cookie是将会话的状态保存在浏览器客户端上(cookie对象存储在浏览器客户端上)
- session是将会话的状态保存在服务器端上(session对象存储在服务器上)
- cookie和session机制出现的原因是因为HTTP协议是无状态、无连接协议。
- cookie机制和session机制严格意义上来说都属于HTTP协议的一部分,不属于编程语言中的机制,只要涉及到http协议,者两种机制都是需要的。
- 在HTTP协议中规定:当浏览器向服务器发送请求的时候,会自动携带该path(URL,后面会说)下的cookie数据到服务器。
4.Java中Cookie类的基础方法
- Java提供了一个Cookie类来专门处理cookie数据:
jakarta.servlet.http.Cookie
- 创建cookie对象
Cookie cookie=new Cookie(String name,String value);
- java中将cookie数据发送给浏览器
response.addCookie(Cookie cookie);
- 用Java设置cookie的有限时间
cookie.setMaxAge(number); //参数的单位为秒
例:
cookie.setMaxAge(60*30); //设置cookie将会在半小时后失效
1.当没有设置有效时间时,cookie对象默认保存在浏览器的运行内存当中,浏览器关闭则cookie消失。
2.设置有效时间>0,则此cookie对象一定会保存在硬盘文件当中
3.设置有效时间=0,则表示该cookie对象被删除,主要被用于删除浏览器上的同名cookie
4.设置有效时间<0,表示该cookie对象不会被存储在硬盘文件中(保存在浏览器的运行内存中,与不设置有效时间效果是一样的)
- 设置Cookie的path
cookie.setPath("/servlet");
//表示只要是这个servlet项目的请求路径,都会提交这个cookie到服务器
- 浏览器发送cookie到服务器,服务器的接收方法。
//可能返回null
Cookie[] cookies=requset.getCookies();
if (cookies!=null){
for(Cookie cookie : cookies){
//获取cookie的name
String name = cookie.getName();
//获取cookie的value
String value = cookie.getValue();
5.Cookie的path(关联路径)
- 假设现在发送的请求路径是:
http://localhost:8080/servlet/test/test_01
- 如果cookie没有设置path,则默认的path为
http://localhost:8080/servlet/test以及其子路径
- 即只要浏览器的请求路径是http://localhost:8080/servlet/test或者其子路径的话,此cookie都会被发送到服务器