学习笔记-Cookie概述
servlet的两个核心 cookie,session
1、Cookie是什么?Cookie的作用是什么?
本地缓存机制,将页面的会话状态存放在本地保存器(Cookie),当下次访问时这些缓存会跟随请求再次回到页面上,恢复之前的浏览会话状态。
【会话】访问一个页面就是一次聊天,你问我答就像请求和响应,和服务器的一次聊天,这次沟通被称为【会话】,当下次聊天我们还能接着上次的聊天【会话】,这就需要Cookie机制将这这些信息存储到我们的脑子(本地),这就是保存会话状态,下次再见到时,想接着聊天就需要:上次上次你说的那家餐馆,要不今天去试试?(携带Cookie发送请求)
专业说法是保存会话状态,Cookie就是保存会话状态的容器。
- Cookie可以保存会话状态,但是这个会话状态是保留在客户端上的。
- 只要Cookie清楚,或者Cookie失效,这个会话状态就没有了。
- Cookie是保存在浏览器客户端上的
- Cookie可以保存在浏览器缓存中,浏览器关闭Cookie消失
- Cookie也可以保存在客户端硬盘文件中,浏览器关闭Cookie还在,除非Cookie失效
2、Cookie只有在JavaWeb中有吗?
- Cookie不知在JavaWeb中存在
- 只要是web开发,只要是B/S架构的系统,只要是基于HTTP协议,就有Cookie的存在
- Cookie这种机制是HTTP协议规定的,是Http协议中的一个子协议,Http请求或响应中可以携带Cookie
3、 Http请求携带的交互流程
用户访问服务器,服务器根据需求创建携带信息Cookie对象:
Cookie cookie = new Cookie(String cookiename,String cookievalue);
服务器将Cookie添加到Response对象中,通过响应发送到客户端浏览器:
response.addCookie(cookie);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jE2kuSo1-1614871462731)(C:\Users\chens\AppData\Roaming\Typora\typora-user-images\image-20210304225646514.png)]
浏览器从响应中解析到set-Cookie,将Cookie存储到本地。
在次浏览该网页时,Cookie会随请求一起发送
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lyVSmmVn-1614871462734)(C:\Users\chens\AppData\Roaming\Typora\typora-user-images\image-20210304230129478.png)]
4、Cookie实现的功能,常见有哪些
-
保留购物车商品的状态在客户端上
- 十天内免登录 ......
5、Cookie的创建
在java中Cookie被当作 类来处理,使用new运算符可以创建Cookie对象,而且Cookie有两部分组成
分别是Cookie的name和value,name和value都是字符串类型String
Cookie cookie = new Cookie(String cookiename,String cookievalue);
6、Cookie的属性
1)设置Cookie的保存在本地的时长
默认情况下,没有设置Cookie的有效时长,该Cookie默认被保存在浏览器临时缓存当中,浏览器关闭即Cookie被销毁,
我们可以通过设置Cookie的有效时长,以保证Cookie保存在硬盘中,但这个时长必须时>0的。换句话说,只要设置Cookie的有效时长大于0,
则该Cookie会被保存到客户端硬盘当中,有效时长到期,硬盘中Cookie被销毁
cookie.setMaxAge(60*60);1小时有效(秒为单位)
注意点:
cookie有效时长= 0直接被销毁
cookie有效时长<0不会被保存
cookie有效时长>0存储到硬盘中
2)指定Cookie的路径
可以通过java程序进行设置,保证Cookie和某个特定的路径绑定一起。
假设,执行了这样的路经:
cookie.setPath("/prj-srevlet-19/king");
那么:Cookie将和/prj-srevlet-19/king绑定定一起,只有输入完整路径才会发送Cookie
在浏览器客户端无论是硬盘文件中还是缓存中保存的Cookie,什么时候会再次发送给服务器?
浏览器会不会发送这些Cookie给服务器,和路径有关
- 请求路径和Cookie时紧密关联的
- 不同的请求路径会发送提交不同的Cooki
默认情况下Cookie和哪些路径绑定一起?
http://localhost:8080/prj-servlet-19/getCookieFromServer/a获得的Cookie
会和/getCookieFromServer/路径绑定到一起。也就是说以后只要发送“getCookieFromServer/”及其下面的子路径,Cookie就一定会提交给服务器。
7、浏览器提交Cookie给服务器,服务器怎么接收Cookie?
Cookie[] c = req.getCookie();
Server/”及其下面的子路径,Cookie就一定会提交给服务器。
7、浏览器提交Cookie给服务器,服务器怎么接收Cookie?
Cookie[] c = req.getCookie();
遍历Cookie[]即可。