J2EE Cookie 基础知识总结

  • Tomcat 9

在讲述 Cookie 之前,有必要谈谈 Session

  1. session 对象是服务器管理的(session对象存储在服务器端)
  2. session 对象是无状态的(每一个session对象与浏览器不存在直接的对应关系)
  3. session 需要一个标识来寻找
标识(JSESSIONID )
标识是谁分配的?服务器
标识长成什么样?是一个 String(唯一)
标识存储在哪里?存储在浏览器端
什么时候存进去的?服务器在第一次给浏览器响应的时候携带标识
标识具体存储在哪里?浏览器端的 Cookie

请求与响应过程简述

  1. 先启动服务器(携带项目:有许多资源,比如 Servlet、JSP、Filter…)
  2. 浏览器主动发送请求(第一次请求时没有 标识
  3. 服务器解析请求,根据请求找资源,然后响应信息给浏览器的时候携带有 标识
  4. 浏览器解析响应信息,并将 标识 存储,然后每一次新请求都携带 标识(正确来说是全部 Cookie 信息,标识 存储在 Cookie 中)

服务器端操作 Cookie

(1)服务器端创建 Cookie

Cookie cookie = new Cookie("key", "value");

response.addCookie(cookie);
  • 服务器端响应信息时携带 Cookie 信息
  • 下一次浏览器发送请求的时候会携带 Cookie 信息

(2)服务器端获取 Cookie

Cookie[] = request.getCookies();

(3)Cookie 对象常用方法

cookie.getName(); //获取cookie的key
cookie.getValue(); //获取cookie的value
cookie.setMaxAge(int); //设置cookie的失效时间,单位:秒

cookie.getDomain(); //返回cookie的域名
cookie.getPath();
cookie.getVerson();
...
  • cookie.setMaxAge(int); 默认值是 -1,当前 Session 结束时 Cookie 消失

(4)清除 Cookie

  • 浏览器端(不同浏览器,不同的操作方法)
  • 服务器端不能直接删除 Cookie,因为 Cookie 实际上存储在浏览器端,需要迂回告知浏览器端删除
cookie.setMaxAge(0);
response.addCookie(coookie);

JavaScript 操作 Cookie

var cookieObject = document.cookie; //k1=v1;k2=v2;k3=v3