Cookie的工作机制

简介: Cookie的工作机制

第一节 提出问题与解决方案核心代码

1、提出问题

保持用户登录状态,背后的底层逻辑是:服务器在接收到用户请求的时候,有办法判断这个请求来自于之前的某一个用户。所以保持登录状态,本质上是保持『会话状态』

2、解决方案

①结论

使用HttpSession对象,将数据存入会话域就能保持会话状态。

1. HttpSession session = request.getSession();
2. session.setAttribute("user", user);

②demo体验

1]准备环境

参考会话控制demo原始纯净版

[2]创建将数据存入会话域的Servlet

1. public class HelloWorldServlet extends ModelBaseServlet {
2.     protected void setValue(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
3. 
4. // 1.通过request对象获取session对象
5. HttpSession session = request.getSession();
6. 
7. // 2.设置数据名称和数据的值
8. String attrName = "sessionHelloAttrName";
9. String attrValue = "sessionHelloAttrValue";
10. 
11. // 3.将数据存入会话域
12.         session.setAttribute(attrName, attrValue);
13. 
14. // 4.渲染视图
15. processTemplate("page-target", request, response);
16.     }
17. }

[3]在其他页面从会话域取出数据

1. <div th:if="${#strings.isEmpty(session.sessionHelloAttrName)}">
2.     没有从会话域获取到数据
3. </div>
4. <div th:if="${not #strings.isEmpty(session.sessionHelloAttrName)}">
5. <p>从会话域读取到:<span th:text="${session.sessionHelloAttrName}"></span></p>
6. </div>

[4]操作效果

第二节 Cookie的工作机制

1、HTTP协议和会话控制

HTTP协议本身是无状态的。单靠HTTP协议本身无法判断一个请求来自于哪一个浏览器,所以也就没法识别用户的身份状态。

2、Cookie介绍

①本质

  • 在浏览器端临时存储数据
  • 键值对
  • 键和值都是字符串类型
  • 数据量很小

②Cookie在浏览器和服务器之间的传递

[1]没有Cookie的状态

在服务器端没有创建Cookie并返回的情况下,浏览器端不会保存Cookie信息。双方在请求和响应的过程中也不会携带Cookie的数据。

[2]创建Cookie对象并返回

1. // 1.创建Cookie对象
2. Cookie cookie = new Cookie("cookie-message", "hello-cookie");
3. 
4. // 2.将Cookie对象添加到响应中
5. response.addCookie(cookie);
6. 
7. // 3.返回响应
8. processTemplate("page-target", request, response);

[3]服务器端返回Cookie的响应消息头

[4]浏览器拿到Cookie之后

浏览器拿到Cookie之后,以后的每一个请求都会携带Cookie信息。

[5]服务器端读取Cookie的信息

1. // 1.通过request对象获取Cookie的数组
2. Cookie[] cookies = request.getCookies();
3. 
4. // 2.遍历数组
5. for (Cookie cookie : cookies) {
6. System.out.println("cookie.getName() = " + cookie.getName());
7. System.out.println("cookie.getValue() = " + cookie.getValue());
8. System.out.println();
9. }

③Cookie时效性

[1]理论

  • 会话级Cookie
  • 服务器端并没有明确指定Cookie的存在时间
  • 在浏览器端,Cookie数据存在于内存中
  • 只要浏览器还开着,Cookie数据就一直都在
  • 浏览器关闭,内存中的Cookie数据就会被释放
  • 持久化Cookie
  • 服务器端明确设置了Cookie的存在时间
  • 在浏览器端,Cookie数据会被保存到硬盘上
  • Cookie在硬盘上存在的时间根据服务器端限定的时间来管控,不受浏览器关闭的影响
  • 持久化Cookie到达了预设的时间会被释放

服务器端返回Cookie时附带过期时间的响应消息头如下:

服务器通知浏览器删除Cookie时的响应消息头如下:

[2]代码

1. // ※给Cookie设置过期时间
2. // 正数:Cookie的过期时间,以秒为单位
3. // 负数:表示这个Cookie是会话级的Cookie,浏览器关闭时释放
4. // 0:通知浏览器立即删除这个Cookie
5. cookie.setMaxAge(20);

[3]会话和持久化Cookie对比

④Cookie的domain和path

上网时间长了,本地会保存很多Cookie。对浏览器来说,访问互联网资源时不能每次都把所有Cookie带上。浏览器会使用Cookie的domain和path属性值来和当前访问的地址进行比较,从而决定是否携带这个Cookie。


目录
相关文章
|
3月前
|
前端开发 算法 Serverless
中后台前端开发问题之保证用户的token等信息的唯一性和不可伪造性如何解决
中后台前端开发问题之保证用户的token等信息的唯一性和不可伪造性如何解决
48 0
|
6月前
|
存储 安全 Java
基于 Cookie 的信息共享机制
基于Cookie的信息共享机制用于客户端状态保持。Cookie是服务器生成并发送到浏览器的文本文件,存储用户状态和安全信息。当用户发起请求时,浏览器会将Cookie一并发送,服务器据此处理。Cookie分为内存和硬盘两种,有持久和非持久之分,但因以明文存储,存在安全隐患。JSP/Servlet中的Cookie类提供管理方法。示例代码展示了如何使用JSP设置和检查Cookie。需注意Cookie的安全问题,避免数据泄露。
76 3
|
6月前
|
存储 缓存 JSON
【Web开发】会话管理与无 Cookie 环境下的实现策略
【Web开发】会话管理与无 Cookie 环境下的实现策略
Session的工作机制
Session的工作机制
84 0
|
存储 Java 应用服务中间件
客户端会话跟踪技术 Cookie 浅谈
客户端会话跟踪技术 Cookie 浅谈
139 0
Web阶段:第十六章:Cookie技术
Web阶段:第十六章:Cookie技术
Web阶段:第十六章:Cookie技术
|
应用服务中间件 API
Web阶段:第十七章:Session会话
Web阶段:第十七章:Session会话
Web阶段:第十七章:Session会话
|
存储 编解码 应用服务中间件
【JavaWeb】会话跟踪技术Cookie与Session原始真解(下)
文章目录 1 什么是会话? 2 Cookie技术 2.1 Cookie简介 2.2 Cookie的理解与创建 2.3 服务器获取Cookie与Cookie的修改 2.4 Cookie的生命控制与生命周期 2.5 Cookie有效路径Path设置 3 Session会话技术 3.1 初探Session 3.2 Session的创建、获取与基本使用 3.3 Session的生命控制与生命周期 3.4 如何理解Session底层是基于Cookie实现的?
【JavaWeb】会话跟踪技术Cookie与Session原始真解(下)
|
存储 应用服务中间件 数据安全/隐私保护
【JavaWeb】会话跟踪技术Cookie与Session原始真解(上)
文章目录 1 什么是会话? 2 Cookie技术 2.1 Cookie简介 2.2 Cookie的理解与创建 2.3 服务器获取Cookie与Cookie的修改 2.4 Cookie的生命控制与生命周期 2.5 Cookie有效路径Path设置 3 Session会话技术 3.1 初探Session 3.2 Session的创建、获取与基本使用 3.3 Session的生命控制与生命周期 3.4 如何理解Session底层是基于Cookie实现的?
【JavaWeb】会话跟踪技术Cookie与Session原始真解(上)