一篇文章搞懂Cookie
目录
1 什么是Cookie
2 创建Cookie
3 浏览器查看Cookie
3.1 浏览器查看Cookie的第一种方式
3.2 浏览器查看Cookie的第二种方式
4 获取Cookie
5 修改Cookie
6 Cookie编码与解码
6.1 创建带中文Cookie
6.2 读取带中文Cookie
6.3 获取中文Cookie请求效果
6.4 解决创建和获取中文Cookie
7 Cookie优点和缺点
7.1 Cookie优点
7.2 Cookie缺点
1 什么是Cookie
Cookie是在浏览器访问Web服务器的某个资源时,由Web服务器在HTTP响应消息头中附带传送给浏览器的一小段数据。
一旦Web浏览器保存了某个Cookie,那么它在以后每次访问该Web服务器时,都应在HTTP请求头中将这个Cookie回传给Web服务器。
一个Cookie主要有标识该信息的名称(name)和值(value)组成。
2 创建Cookie
//设置CookieCookie cookie = new Cookie("username", "zhangsan");/*
*设置Cookie存活时间,在浏览器内存中的保存时间,单位为秒,
* 正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
* 负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
* 零:删除对应Cookie
*/
cookie.setMaxAge(60);//设置Cookie的访问路径
cookie.setPath("/webProject05_war_exploded/GetCookieValueServlet01");//发送Cookie到客户端
response.addCookie(cookie);
3 浏览器查看Cookie
3.1 浏览器查看Cookie的第一种方式
3.2 浏览器查看Cookie的第二种方式
4 获取Cookie
//获取所有Cookie
Cookie[] cookies = request.getCookies();//遍历数组,获取所有的Cookie
for (Cookie cookie : cookies) {System.out.println(cookie.getName() + "-" + cookie.getValue());
}System.out.println("----------------------------------------");//遍历数组,获取指定的Cookie
for (Cookie cookie : cookies) {if (cookie.getName().equals("username")) {System.out.println(cookie.getName() + "-" + cookie.getValue());}
}
5 修改Cookie
只需要保证Cookie的名称和路径一致即可修改
注意:如果改变cookie的name和有效路径,会新建cookie,而改变cookie值、有效期会覆盖原有cookie
//设置Cookie,如果改变cookie的name和有效路径,会新建cookie,而改变cookie值、有效期会覆盖原有cookie
Cookie cookie = new Cookie("username", "lisi");/*
*设置Cookie存活时间,在浏览器内存中的保存时间,单位为秒,
* 正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除
* 负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁
* 零:删除对应Cookie
*/
cookie.setMaxAge(30);//设置Cookie的访问路径cookie.setPath("/webProject09_war_exploded/GetCookieValueServlet01");//发送Cookie到客户端
response.addCookie(cookie);
6 Cookie编码与解码
Cookie默认不支持中文,只能包含ASCII字符,所以Cookie需要对Unicode字符进行编码,否则会出现乱码
-
编码可以使用java.net.URLEncoder类的encode(String str,String encoding)方法
-
解码可以使用java.net.URLDecoder类的decode(String str,String encoding)方法
6.1 创建带中文Cookie
package com.cxyzxc.www.servlet01;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(name = "CookieServlet03", value = "/CookieServlet03")
public class CookieServlet03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//Cookie默认不支持中文,只能包含ASCII字符,所以Cookie需要对Unicode字符进行编码,否则会出现乱码Cookie cookie = new Cookie("姓名", "张三");//设置Cookie的访问路径cookie.setPath("/webProject09_war_exploded/GetCookieValueServlet03");//发送Cookie到客户端response.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
6.2 读取带中文Cookie
package com.cxyzxc.www.servlet01;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(name = "GetCookieValueServlet03", value = "/GetCookieValueServlet03")
public class GetCookieValueServlet03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取所有CookieCookie[] cookies = request.getCookies();//遍历数组,获取所有的Cookiefor (Cookie cookie : cookies) {System.out.println(cookie.getName() + "-" + cookie.getValue());}System.out.println("----------------------------------------");//遍历数组,获取指定的Cookiefor (Cookie cookie : cookies) {if (cookie.getName().equals("姓名")) {System.out.println(cookie.getName() + "-" + cookie.getValue());}}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
6.3 获取中文Cookie请求效果
6.4 解决创建和获取中文Cookie
6.4.1 创建中文Cookie
package com.cxyzxc.www.servlet01;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;
import java.net.URLEncoder;@WebServlet(name = "CookieServlet04", value = "/CookieServlet04")
public class CookieServlet04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//Cookie默认不支持中文,只能包含ASCII字符,所以Cookie需要对Unicode字符进行编码,否则会出现乱码Cookie cookie = new Cookie(URLEncoder.encode("姓名","UTF-8"),URLEncoder.encode("张三","UTF-8"));//设置Cookie的访问路径cookie.setPath("/webProject09_war_exploded/GetCookieValueServlet04");//发送Cookie到客户端response.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
6.4.2 获取中文Cookie
package com.cxyzxc.www.servlet01;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;
import java.net.URLDecoder;@WebServlet(name = "GetCookieValueServlet04", value = "/GetCookieValueServlet04")
public class GetCookieValueServlet04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取所有CookieCookie[] cookies = request.getCookies();//遍历数组,获取指定的Cookiefor (Cookie cookie : cookies) {if (URLDecoder.decode(cookie.getName(),"UTF-8").equals("姓名")) {System.out.println(URLDecoder.decode(cookie.getName(),"UTF-8") + "-" + URLDecoder.decode(cookie.getValue(),"UTF-8"));}}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
6.4.3 获取中文Cookie请求效果
7 Cookie优点和缺点
7.1 Cookie优点
-
可配置到期规则
-
简单性:Cookie是一种基于文本的轻量结构,包含简单的键值对
-
数据持久性:Cookie默认在过期之前是可以一直存在客户端浏览器上的
7.2 Cookie缺点
-
大小受到限制:大多数浏览器对Cookie的大小有4K、8K字节的限制
-
用户配置为禁用:有些用户禁用了浏览器或客户端设备接收Cookie的能力,因此限制了这一功能
-
潜在的安全风险:Cookie可能会被篡改。会对安全性造成潜在风险或者导致依赖于Cookie的应用程序失败
相关文章:

一篇文章搞懂Cookie
目录 1 什么是Cookie 2 创建Cookie 3 浏览器查看Cookie 3.1 浏览器查看Cookie的第一种方式 3.2 浏览器查看Cookie的第二种方式 4 获取Cookie 5 修改Cookie 6 Cookie编码与解码 6.1 创建带中文Cookie 6.2 读取带中文Cookie 6.3 获取中文Cookie请求效果 6.4 解决创建和…...
深入解读.NET MAUI音乐播放器项目(二):播放内核
播放控制服务 IMusicControlService: 播放控制类,用于当前平台播放器对象的操作,对当前所播放曲目的暂停/播放,下一首/上一首,快进快退(寻迹),随机、单曲模式等功能的控制。 播放控制类包含一…...

4.SpringWeb
一、创建项目LomBok:辅助开发工具,减少代码编写Spring Web:带上Spring MVC,可以做Web开发了Thymleaf: Web开发末班引擎(不常用)创建好,如下:static/ 放置静态资源的根目录templates/ 放置模板文件的根目录 二、资源配置…...

C++中的枚举与位域
枚举在传统 C中,枚举类型并非类型安全,枚举类型会被视作整数,则会让两种完全不同的枚举类型可以进行直接的比较(虽然编译器给出了检查,但并非所有),甚至同一个命名空间中的不同枚举类型的枚举值…...
第19章 MongoDB Limit与Skip方法教程
第19章 MongoDB Limit与Skip方法教程 MongoDB Limit() 方法 如果仁兄需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。 语法 limit()方法基本语法请…...
进程间通信——消息队列
多线程 进程间通信——消息队列 消息队列——发送 测试代码 #include <sys/types.h> #include <sys/msg.h> #include <sys/ipc.h>#include <stdlib.h> #include <stdio.h> #include <string.h>#define MAX_BUF_SIZE 255struct msgtype {…...

OpenMMLab 实战营打卡 - 第 7 课
OpenMMLab MMSegmentation内容概要MMSegmentation统一超参MMSegmentation 的项目结构分割模型的模块化设计分割模型的配置文件主干网络的配置ResNet v1c主解码头的配置辅助解码头的配置数据集配置数据处理流水线常用训练策略参考资料内容概要 • MMSegmentation 项目概述 • M…...

MAC Boook打印长图
有时老师给留的作业是一张长图,直接打印或者通过把图放入word打印都不能实现把长页分成多页进行打印。通过网上找到思路可以通过EXCEL实现将长图分成多页打印。 测试版本 macos:ventura 13.1 office 365 注:同样适用windows版本的excel 第…...

web3:区块链共识机制系列-POS(Proof of Stake)股权证明算法
web3相关学习一并收录至该博客:web3学习博客目录大全 前情衔接:web3:区块链常见的几大共识机制及优缺点 目录前言算法公式与原理算法公式运作原理以Peer Coin为例缺陷优点缺点特点分类发展历程casper协议1.什么是无成本利益关系问题2.引入casper协议解决…...
Linux fork()系统调用流程解析
1. fork()函数介绍(百度百科) fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork&…...

自定义软件帮助文档(qt assistant实现)
网上搜了一下,软件的帮助文档,三个都可以:https://github.com/zealdocs/zeal,https://zealdocs.org/,看看这个博客说的 https://blog.csdn.net/libaineu2004/article/details/125028913,这个也是开源的&…...
ESP32设备驱动-GPIO外部中断
GPIO外部中断 文章目录 GPIO外部中断1、GPIO中断介绍2、GPIO中断使用步骤3、软件准备4、硬件准备5、代码实现在前面的文章 ESP32设备驱动-GPIO数字输入与输出中介绍如何对GPIO进行控制操作。本文将在该基础上使用GPIO中断进一步优化按键输入。即演示如何使用GPIO中断。 1、GPI…...

【安全】nginx反向代理+负载均衡上传webshel
Nginx负载均衡下上传webshell 什么是反向代理? 正向代理就是代替客户端进行各种服务的访问以及获取;那么反向代理自然就是代替服务器进行事务处理,就是此时的代理服务器负责将用户的各项请求做一个汇总、分类,将其分发到不同的服务…...
华为OD机试 - 单词接龙(Python)| 真题,思路,知识点
单词接龙 题目 单词接龙的规则是: 可用于接龙的单词,首字母必须要与前一个单词的尾字母相同; 当存在多个首字母相同的单词时,取长度最长的单词; 如果长度也相等,则取字典序最小的单词; 已经参与接龙的单词不能重复使用; 现给定一组全部由小写字母组成的单词数组, 并指…...

[ 系统安全篇 ] window 命令禁用用户及解禁方法
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...

Https 协议超强讲解(二)
浏览器是如何确保 CA 证书的合法性? 1. 证书包含什么信息? 颁发机构信息 公钥 公司信息 域名 有效期 指纹 …… 2. 证书的合法性依据是什么? 首先,权威机构是要有认证的,不是随便一个机构都有资格颁发证书&am…...

C语言的程序环境和预处理详解
目录 一、程序的翻译环境和执行环境 二、编译和链接详解 2、1 翻译环境 2、2 编译过程详解 2、3 执行环境 三、预处理详解 3、1 预定义符号 3、2 #define 3、2、1 #define定义的符号 3、2、2 #define 定义宏 3、2、3 #define 替换规则 3、3 宏和函数的对比 3、4 条件编译 3、5…...

3.JUC【Java面试第三季】
3.JUC【Java面试第三季】前言推荐3.JUC06_闲聊AQS面试1.题目说明07_可重入锁理论2.可重入锁说明“可重入锁”这四个字分开来解释可重入锁的种类08_可重入锁的代码验证-上09_可重入锁的代码验证-下3.LockSupport10_LockSupport是什么LockSupport是什么11_waitNotify限制线程等待…...

Linux防火墙(7)
实验目的 通过该实验了解Linux防火墙iptables实现原理,掌握iptables基本使用方法,能够利用iptables对操作系统进行加固。预备知识基本原理 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,具有完成…...
2.11整理(2)(主要关于teacher forcing)
teacher forcing 训练迭代过程早期的RNN预测能力非常弱,几乎不能给出好的生成结果。如果某一个unit产生了垃圾结果,必然会影响后面一片unit的学习。RNN存在着两种训练模式(mode): free-running mode:就是常见的那种训练网络的方式: 上一个sta…...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...