当前位置: 首页 > news >正文

cookie基本使用

查看cookie   f12-> application->cookie

基本使用

请求 1 阶段

  • 服务器生成并发送 Cookie :当浏览器发起请求 1 访问服务器的某个资源(比如访问一个电商网站的首页) ,服务器在处理这个请求时,可能会根据业务需求生成一个或多个 Cookie 。例如,服务器可能会生成一个包含用户登录状态(如果已登录)、个性化设置(如语言偏好、主题颜色等 )相关信息的 Cookie 。以之前的代码示例来说,就像 AServlet 中,在处理 doGet 请求时创建了一个名为 username ,值为 wangruoshui 的 Cookie ,并设置了存活时间,然后通过 resp.addCookie(cookie) 将这个 Cookie 附加到响应中,发送回给浏览器。
  • 浏览器接收并存储 Cookie :浏览器收到服务器的响应后,会提取出响应中的 Cookie 信息,并将其存储在本地。不同浏览器有各自的 Cookie 存储机制和位置,但总体来说,这些 Cookie 数据会被保存下来,用于后续对该服务器的请求。

请求 2 阶段

  • 浏览器携带 Cookie 发送请求 :当浏览器再次发起请求 2(比如请求查看商品详情页)时,会自动检查本地存储的与该服务器相关的 Cookie 。如果存在对应的 Cookie ,就会将这些 Cookie 附加到请求头中,一起发送给服务器。例如,浏览器在访问电商网站的其他页面时,会把之前保存的与该电商网站相关的 Cookie 都带上。
  • 服务器读取并处理 Cookie :服务器接收到请求 2 后,会从请求头中提取出 Cookie 信息。通过解析这些 Cookie ,服务器可以识别出该请求来自之前建立过会话的同一浏览器。接着,服务器可以根据 Cookie 中携带的信息,进行相应的处理。比如根据用户登录状态相关的 Cookie ,判断用户是否已登录,从而决定是否展示个性化内容、提供特定功能等;像 BServlet 代码中,通过 req.getCookies() 获取客户端传来的所有 Cookie ,再遍历查找特定名称(如 username )的 Cookie ,并对其值进行处理,就是服务器读取和利用 Cookie 信息的过程 。

通过 Cookie 在请求 1 和请求 2 之间这样的传递和交互,服务器能够在多次请求间识别出是同一个浏览器在进行访问,进而实现会话内的数据共享和状态维护,让用户在浏览网站不同页面时能获得更连贯、个性化的体验。

 

发送cookie

package com.itheima.Web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/aServlet")
public class AServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Cookie cookie=new Cookie("username","wangruoshui");resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}

获取cookie

package com.itheima.Web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/bServlet")
public class BServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取cookiefinal Cookie[] cookies = req.getCookies();for (Cookie cookie : cookies) {String name=cookie.getName();if("username".equals(name)){String value=cookie.getValue();System.out.println(name+":"+value);}}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}
小结

这里主要讲解了Cookie的基本使用,包含两部分内容

  • 发送Cookie:
    • 创建Cookie对象,并设置值:Cookie cookie = new Cookie("key","value");
    • 发送Cookie到客户端使用的是Reponse对象:resp.addCookie(cookie);
  • 获取Cookie:
    • 使用Request对象获取Cookie数组:Cookie[] cookies = request.getCookies();
    • 遍历数组
    • 获取数组中每个Cookie对象的值:cookie.getName()cookie.getValue()

Cookie的原理分析

对于Cookie的实现原理是基于HTTP协议的,其中设计到HTTP协议中的两个请求头信息:

  • 响应头:set-cookie
  • 请求头: cookie
  • 前面的案例中已经能够实现,AServlet给前端发送Cookie,BServlet从request中获取Cookie的功能
  • 对于AServlet响应数据的时候,Tomcat服务器都是基于HTTP协议来响应数据
  • 当Tomcat发现后端要返回的是一个Cookie对象之后,Tomcat就会在响应头中添加一行数据Set-Cookie:username=zs
  • 浏览器获取到响应结果后,从响应头中就可以获取到Set-Cookie对应值username=zs,并将数据存储在浏览器的内存中
  • 浏览器再次发送请求给BServlet的时候,浏览器会自动在请求头中添加Cookie: username=zs发送给服务端BServlet
  • Request对象会把请求头中cookie对应的值封装成一个个Cookie对象,最终形成一个数组
  • BServlet通过Request对象获取到Cookie[]后,就可以从中获取自己需要的数据
http://www.dtcms.com/a/292469.html

相关文章:

  • 如何用keepAlive实现标签页缓存
  • Samba 共享解决方案:微服务多机共享 `/app` 目录
  • Hugging Face 模型的缓存和直接下载有什么区别?
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-微博基本信息实现
  • 程序代码篇---PID简介
  • 《计算机“十万个为什么”》之 MQ
  • 卷积神经网络:LeNet模型
  • STM32-GPIO理论部分1
  • 如何将iPad中的视频传输到电脑(6种简单方法)
  • 如何构建FunASR的本地语音识别服务
  • 出货奥地利,稳石氢能AEM氢户储应用方案撬动欧洲市场。
  • 智能文本抽取在法院卷宗管理的技术实现及优势
  • 记录解决问题--使用maven help插件一次性上传所有依赖到离线环境,spring-boot-starter-undertow离线环境缺少依赖
  • windows下nvm的安装及使用
  • 清华大学顶刊发表|破解无人机抓取与投递难题
  • 2025年COR SCI2区,基于多种配送模式的无人机自主配送车辆路径问题,深度解析+性能实测
  • 无人机吊舱与遥控器匹配技术解析
  • 【matlab】无人机控制算法开发与应用流程
  • 从差异到协同:OKR 与 KPI 的管理逻辑,Moka 让适配更简单
  • 进程优先级切换调度-进程概念(6)
  • Linux笔记1——简介安装
  • 高可用架构模式——数据集群和数据分区
  • Kafka监控体系搭建:基于Prometheus+JMX+Grafana的全方位性能观测方案
  • -----------------------------------事务--------------------------
  • 【SpringAI实战】实现仿DeepSeek页面对话机器人
  • 风能革新!5大理由选Canopen转Profinet网关
  • 基于python django深度学习的中文文本检测+识别,可以前端上传图片和后台管理图片
  • Oracle使用小计
  • VUE2 项目学习笔记 ? 语法 v-if/v-show
  • C# 11.0 新特性 u8 后缀