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

[Java Web]Cookie | 一文详细介绍会话跟踪技术中的Cookie

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐所属专栏:Java Web

目录

  • Cookie
  • 1、工作原理
  • 2、如何使用
    • 2.1、发送Cookie
    • 2.2、获取Cookie
  • 3、Cookie的存活时间
  • 4、中文错误

Cookie

Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问。
Cookie是一种用于在Web浏览器和Web服务器之间存储数据的小型文本文件。它通过在Web浏览器中存储一个键值对,使Web应用程序能够跟踪用户的活动和状态。

1、工作原理

下面是Cookie的工作原理:

  1. 当用户访问一个Web应用程序时,Web服务器会向Web浏览器发送一组Cookie。每个Cookie都包含一个键值对,例如“username=john”,其中“username”是Cookie的名称,而“john”是它的值。
  2. 当Web浏览器接收到Cookie后,它会将Cookie保存在用户的计算机上。每当用户再次访问该Web应用程序时,Web浏览器会将Cookie发送回Web服务器。
  3. Web服务器可以使用Cookie来跟踪用户的活动和状态。例如,当用户登录时,Web服务器可以创建一个Cookie,将用户的登录信息存储在Cookie中,并将其发送回Web浏览器。当用户浏览网站时,Web应用程序可以使用该Cookie来识别用户并提供个性化的体验。
  4. 由于Cookie存储在用户的计算机上,因此它们可以在用户关闭Web浏览器后继续存在。这使得Web应用程序可以在用户下次访问时保留用户的活动和状态。

需要注意的是,Cookie是由Web服务器设置和使用的,而不是由Web浏览器设置和使用的。
此外,Cookie存储在用户的计算机上,并且可以被删除或修改,因此它们不是绝对可信的。
因此,在处理敏感信息时,应该使用其他更可靠的技术,例如使用HTTPS协议来加密数据传输。

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

  1. 对于ServletA响应数据的时候,Tomcat服务器都是基于HTTP协议来响应数据
  2. 当Tomcat发现后端要返回的是一个Cookie对象之后,Tomcat就会在响应头中添加一行数据:Set-Cookie:username=zs
  3. 浏览器获取到响应结果后,从响应头中就可以获取到Set-Cookie对应值username=zs,并将数据存储在浏览器的内存中
  4. 浏览器再次发送请求给ServletB的时候,浏览器会自动在请求头中添加Cookie: username=zs发送给服务端ServletB
  5. Request对象会把请求头中cookie对应的值封装成一个个Cookie对象,最终形成一个数组
  6. ServletB通过Request对象获取到Cookie[]后,就可以从中获取自己需要的数据

2、如何使用

具体使用步骤分为发送Cookie和获取Cookie

2.1、发送Cookie

  1. 创建Cookie对象,并设置数据->Cookie cookie = new Cookie(“key”,“value”);
  2. 使用response对象,发送Cookie到客户端浏览器->response.addCookie(cookie);

编写代码验证:

在浏览器访问这个cookieServlet资源,然后查看浏览器缓存的Cookie:

可以看到Cookie发送成功了

2.2、获取Cookie

  1. 使用request对象,获取客户端携带的所有Cookie->Cookie[] cookies = request.getCookies();
  2. 遍历数组cookies,获取每一个Cookie对象
  3. 使用Cookie对象方法获取数据->cookie.getName(); cookie.getValue();

编写代码验证:

可以看到控制台成功打印出了获取到的Cookie对象
  

3、Cookie的存活时间

当发送请求到ServletB之前,如果把浏览器关闭然后再重新访问资源,可以发现ServletB是获取不到Cookie对象的。
因为在默认情况下,Cookie是存储在浏览器缓存中,当浏览器关闭时,内存释放,Cookie则同时被销毁。
所以,如何实现将Cookie数据存储持久化:通过Cookie的一个API:setMaxAge来实现。

设置Cookie存活时间->setMaxAge(int seconds)
参数second为:

  1. 正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
  2. 负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
  3. 零:删除对应Cookie

4、中文错误

Cookie对象如果存储中文数据,会存在问题,访问时浏览器显示500错误信息码。
所以,Cookie是不能直接存储中文的。

解决方式:URL编码。

  1. 采用URLEncoder.encode()对中文进行编码,将编码后的值存入Cookie中
  2. 在另一个服务器中获取Cookie的值,获取之后使用URLDecoder.decode()解码

代码实现如下:
①编码,存Cookie

②解码,获取Cookie

相关文章:

[Java Web]Cookie | 一文详细介绍会话跟踪技术中的Cookie

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章 ⭐作者主页:逐梦苍穹 ⭐所属专栏:Java Web 目录Cookie1、工作原理2、如何使用2.1、发送Cookie2.2、获取Cookie3、Cookie的存活时间4、中文错误Coo…...

这可能是2023最全的Java面试八股文,共计1658页,Java技术手册的天花板

前两天有个小伙伴在后台留言,最近的面试越来越难了,尤其是技术面,考察得越来越细,越来越底层,庆幸的是最终顺利找到了工作。 一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识 比如果这样的问题…...

字节流及存放本地文件上传和下载文件

前言 之前的文章有写过 vuespringboot使用文件流实现文件下载 实现如何通过 D:\file\文件名.文件格式的形式进行下载文件 但是它对于很多业务场景相对适用性不是很广泛。 以及 elementUI加springboot实现上传excel文件给后端并读取excel 也只能是通过elementui的元素类型进行…...

【翻译】下一步:Go 泛型

原文地址: The Next Step for Generics - The Go Blog https://blog.golang.org/generics-next-step 介绍 自从我们上次写下关于在Go中加入泛型的可能性的文章以来,已经快一年了。现在是该更新的时候了。 设计的更新 我们一直在继续完善泛型设计草案。…...

如何简单实现ELT?

在商业中,数据通常和业务、企业前景以及财务状况相关,有效的数据管理可以帮助决策者快速有效地从大量数据中分析出有价值的信息。数据集成(Data Integration)是整个数据管理流程中非常重要的一环,它是指将来自多个数据源的数据组合在一起&…...

细思极恐,第三方跟踪器正在获取你的数据,如何防范?

细思极恐,第三方跟踪器正在获取你的数据,如何防范? 当下,许多网站都存在一些Web表单,比如登录、注册、评论等操作需要表单。我们都知道,我们在冲浪时在网站上键入的数据会被第三方跟踪器收集。但是&#x…...

Java基础之==,equal的区别(温故而知新)-----点点滴滴的积累

1. 为运算符,equal 为String数据类型的比较方法;相同内容的对象地址不一定相同,但相相同地址的对象内容一定相同; 比较的是值是否相等,equal比较的是是否是同一个对象。 2.基本概念不同 1)对于&#xff0c…...

SpringBoot项目使用切面编程实现数据权限管理

springBoot项目使用切面编程实现数据权限管理什么是数据权限管理如何实现数据权限管理什么是数据权限管理 不同用户在某页面看到数据不一致,实现每个用户之间数据隔离的效果。 如以下场景: ● 页面期望展示当前登录人所在部门的数据。 ● 页面期望展示当…...

亚马逊测评是做什么的,风险有哪些?

自养号测评顾名思义就是自己养国外的买家账号给自己店铺提升销量和评论,做过多年的跨境卖家都知道测评可以快速提高产品的排名、权重和销量,(国内某宝一样的逻辑)但随着测评需求日益增大,卖家在寻求真人测评时也很容易…...

安科瑞导轨式智能通讯管理机

安科瑞 李亚娜 一、概述 AWT200 数据通讯网关应用于各种终端设备的数据采集与数据分析。实现设备的监测、控制、计算,为系统与设备之间建立通讯纽带,实现双向的数据通讯。实时监测并及时发现异常数据,同时自身根据用户规则进行逻辑判断&…...

vs2010下 转换到 COFF 期间失败: 文件无效或损坏

因为同一个电脑上安装多个VS,有多个cvtres.exe。按照下面的操作如果还是不行就在C盘搜索cvtres.exe,然后挨个重命名,看看是调用的哪个,然后修改就可以了。 用VS2010编译C项目时出现这样的错误: LNK1123: 转换到 COFF …...

托福高频真词List19 // 附托福TPO阅读真题

目录 3.28单词 3.29真题​​​​​​​ 3.28单词 legitimately/properlyadv.正当地likewise/similarlyadv.同样地reveal/showv.揭示substantiate/confirmv.证实suppress/stop by forcev.镇压trend/tendencyn.趋势empirical/based on observationa.凭借经验的illuminate/li…...

Go语言项目标准结构应该如何组织的?

这里写自定义目录标题Go项目本身的目录结构Go语言项目典型目录结构GO语言项目最小标准目录结构可执行的Go语言项目目录结构库的Go语言项目目录结构关于internal目录总结参考文章每当我们写一个非hello world实用程序的Go程序或库时,我们都会在项目结构、代码风格和标…...

设计模式简介

设计模式简介 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错…...

#详细介绍!!! 线程池的拒绝策略(经典面试题)

本篇单独讲解线程池的拒绝策略,介绍了当线程池任务满了之后,线程池会以什么样的方式来响应添加进来的任务 目录 一:理解线程池拒绝策略的触发情况代码理解 二:线程池的四种常见的拒绝策略 1.ThreadPoolExecutor.AbortPolicy 2…...

正则表达式作业

利用正则表达式完成下面的操作: 一、不定项选择题 能够完全匹配字符串"(010)-62661617"和字符串"01062661617"的正则表达式包括(A ) A. r"\(?\d{3}\)?-?\d{8}" B. r"[0-9()-]" C. r"[0-9(-)]*\d*&qu…...

《扬帆优配》交易拥挤度达历史极值 当前A股TMT板块性价比几何?

上周,A股商场企稳,但盘面风格分歧再度加深:很多资金涌入以ChatGPT、数字经济为代表的TMT板块,而新能源以及前期强势的“中字头”种类都呈现了回调。兴业证券计算显现,3月24日,TMT及电子板块的商场成交金额占…...

C/C++开发,无可避免的IO输入/输出(篇三).字符串流(内存流)IO处理

目录 一、字符串流 1.1 字符串流继承体系 1.2 字符串流本质-类模板std::basic_stringstream 1.3 字符串流缓冲-std::stringbuf 1.4 stringbuf与序列缓冲 1.5 字符串流的打开模式 二、字符串流的运用 2.1 格式转换是其拿手好戏 2.2 字符串流仅提供移动赋值 2.3 std::basic_str…...

什么是HTTP请求?【JavaWeb技术】

HTTP请求是指从客户端到服务器的请求消息,建立HTTP请求需要经历以下7个步骤才能请求成功。 (1)建立TCP连接 在HTTP开始工作前,Web浏览器需先通过网络和Web服务器连接,连接过程主要使用TCP/IP完成。 (2)Web浏览器向Web服务器发送请求命令 一旦…...

浅聊面试这件事

目录 哪个时间点适合跳槽 如何准备面试 面试原则 面试常见问题 哪个时间点适合跳槽 金三银四、金九银十,这些都📌标记为我们的最佳跳槽节点,但是这些节点真的是最佳的么,也需要因人而异。 如果公司年前不发年终奖&#xff0c…...

【致敬未来的攻城狮计划】连续打卡第7天+瑞萨RA2E1点亮LED

开启攻城狮的成长之旅!这是我参与的由 CSDN博客专家 架构师李肯(http://yyds.recan-li.cn)和 瑞萨MCU (瑞萨电子 (Renesas Electronics Corporation) ) 联合发起的「 致敬未来的攻城狮计划 」的第 7 天,点击…...

Sam Altman专访:GPT-4没太让我惊讶,ChatGPT则让我喜出望外

导读ChatGPT、GPT-4 无疑是 2023 年年初人工智能界最大的「爆款」。3 月 26 日,OpenAI CEO、ChatGPT 之父 Sam Altman 接受了著名学者与科技播客、麻省理工大学研究员 Lex Fridman 的专访,Sam 分享了从OpenAI内部视角如何看待ChatGPT和GPT-4的里程碑式意…...

弯道超车的机会

弯道超车的机会 原文地址:https://bmft.tech/#/1-throught/0302-chance 前言 我一直很想把自己思考的东西表达出来,苦于语文成绩差,文字功力不够,想来想去也不知道用什么话来开场。我不喜欢站在高处对别人指指点点,…...

【设计模式】创建型模式之原型模式

【设计模式】创建型模式之原型模式 文章目录【设计模式】创建型模式之原型模式1.概述2. 构成3. 实现3.1 浅克隆3.2 深克隆1.概述 原型模式(Prototype Pattern):是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它…...

KMP算法——我欲修仙(功法篇)

个人主页:【😊个人主页】 系列专栏:【❤️我欲修仙】 学习名言:莫等闲、白了少年头,空悲切。——岳飞 系列文章目录 第一章 ❤️ 学习前的必知知识 第二章 ❤️ 二分查找 文章目录系列文章目录前言🚗&…...

【嵌入式Linux学习笔记】QT在Linux嵌入式设备上的使用

QT是目前主流的UI界面设计软件之一,Linux系统也支持QT应用,并且提供了很多方便的接口。所以有必要记录一下基于QT,在LCD屏幕上实现UI界面功能的各种细节。 学习视频地址:【正点原子】STM32MP157开发板 1. 系统配置 出于方便&am…...

js根据数据关键字实现模糊查询功能

js根据数据关键字实现模糊查询功能模糊查询实现模糊查询功能的步骤和一般方法第一步:创建假数据或请求接口数据第二步:分析数据格式,处理数据第三步:验证功能完整代码模糊查询 模糊查询功能是指在搜索或者查询时,允许…...

java获取对象属性

Field[] fields vo.getClass().getDeclaredFields(); for (Field field : fields) {//设置允许通过反射访问私有变量field.setAccessible(true);//获取字段的值String value "";Class<?> type field.getType();if (Date.class.equals(type)) {value DateU…...

51单片机(IIC协议OLED屏)

一、IIC协议 1、IIC协议概述 1.1、概述&#xff1a;IIC全称Inter-Integrated Circuit (集成电路总线) 是由PHILIPS公司在80年代开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备。IIC属于半双 工同步通信方式 1.2、特点&#xff1a;简单性和有效性。 由于接口直…...

你知道,华为对项目经理要求的3项技能5项素质是什么吗?

很多人一定在好奇&#xff0c;华为对项目经理的要求是什么呢&#xff1f;普通项目经理应具备什么素质&#xff0c;才能进入华为这样的大厂&#xff0c;在严峻的经济形势下无惧裁员呢&#xff1f; 一、三项软技能 我们在华为举办的项目经理论坛中找到了答案&#xff1a;对于华…...