一文理解Cookie、Session
一文理解Cookie、Session
1、什么是会话
用户打开浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称为一个会话;
HTTP 是无状态的:在同一个连接中,两个执行成功的请求之间是没有关系的。这就带来了一个问题,用户没有办法在同一个网站中进行连续的交互,比如在一个电商网站里,用户把某个商品加入到购物车,切换一个页面后再次添加了商品,这两次添加商品的请求之间没有关联,浏览器无法知道用户最终选择了哪些商品。而使用 HTTP 的头部扩展,HTTP Cookies 就可以解决这个问题。把 Cookies 添加到头部中,创建一个会话让每次请求都能共享相同的上下文信息,达成相同的状态。
2、Cookie
简单来说:是服务器发送到浏览器,并保存在浏览器端的一小块数据。
当用户使用浏览器再去访问服务器中的 web 资源时,就会带着各自的数据去。这样, web 资源处理的就是用户各自的数据了。
cookie工作流程

示例代码:
基于SpringBoot构建测试环境:
@RestController
@RequestMapping("/alpha")
@Slf4j
public class AlphaController {
/**
* cookie示例
*/
@RequestMapping("/cookie/set")
public String setCookie(HttpServletResponse response) {
// 创建实例
Cookie cookie = new Cookie("code", CommunityUtil.generateUUID());
// 过期时间
cookie.setMaxAge(60 * 10);
// cookie的生效范围 也就是在访问什么资源的情况下需要携带此cookie
cookie.setPath("/community/alpha");
response.addCookie(cookie);
return "set cookie ok!!!";
}
/**
* 获取cookie
*/
@GetMapping("/cookie/get")
public String getCookie(@CookieValue("code") String code) {
log.warn("【获取cookie】 code = {} ", code);
return "get cookie ok!!!";
}
}
启动项目,浏览器访问

cookie属性项:
| 属性项 | 属性项介绍 |
|---|---|
| NAME=VALUE | 键值对,可以设置要保存的 Key/Value,注意这里的 NAME 不能和其他属性项的名字一样 |
| Path | 当访问哪个路径时,携带此token |
| Expires | 过期时间,在设置的某个时间点后该 Cookie 就会失效 |
| Domain | 生成该 Cookie 的域名,如 domain="www.baidu.com" |
| Secure | 如果设置了这个属性,那么只会在 SSH 连接时才会回传该 Cookie |
3、Session
session,存储在我们的服务端,下图是session工作流程图。
- 也就是说,服务器只返回对应的sessionId给浏览器

示例代码:
基于SpringBoot构建测试环境
/**
* session示例
*/
@RequestMapping("/session/set")
public String setCookie(HttpSession session) {
session.setAttribute("code", "0000");
return "set cookie ok!!!";
}
/**
* 获取session
*/
@GetMapping("/session/get")
public String getCookie(HttpSession session) {
log.warn("【获取cookie】 code = {} ", session.getAttribute("code"));
return "get cookie ok!!!";
}
启动项目,浏览器访问

可以看到,服务器只返回sessionID
4、两者区别
- cookie数据存放在客户的浏览器(客户端)上,session数据放在服务器上,但是服务端的session的实现对客户端的cookie有依赖关系的;
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用COOKIE;
- 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能超过3K;
一文理解Cookie、Session的更多相关文章
- 深入理解cookie和session
cookie和session在java web开发中扮演了十分重要的作用,本篇文章对其中的重要知识点做一些探究和总结. 1.cookie存在于浏览器 随意打开一个网址,用火狐的调试工具,随意选取一个链 ...
- 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token
为什么你学不会递归?告别递归,谈谈我的一些经验 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...
- 理解cookie,session,token
彻底理解cookie,session,token 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新 ...
- [转帖]彻底理解cookie,session,token
彻底理解cookie,session,token https://www.cnblogs.com/moyand/p/9047978.html 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已 ...
- 转:理解Cookie和Session机制
原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...
- 理解Cookie和Session机制
转载: 理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录 ...
- 形象地理解Cookie和Session
Cookie和Session的形象理解 通过实际生活中的银行卡来理解Cookie和Session间的关系: Cookie相当于银行卡 Session相当于银行账户 结合到银行存钱和取钱的过程来理解: ...
- 基础知识《十二》一篇文章理解Cookie和Session
理解Cookie和Session机制 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定 ...
- 深入理解Cookie和Session机制
转载理解Cookie和Session机制 目录 Cookie机制什么是CookieCookie的不可跨域名性Unicode编码:保存中文BASE64编码:保存二进制图片设置Cookie的所有属性Coo ...
随机推荐
- 总结-LCT
题单: https://www.zybuluo.com/xzyxzy/note/1027479 LuoguP3203 [HNOI2010]弹飞绵羊 动态加边,删边 #include <cstdi ...
- i40e网卡驱动遇到的一个问题
最近在排查一个crash文件的时候,遇到一个堆栈,即软中断收包的时候,skb的关联的dev是null,导致oops, 然后去crash分析的时候,发现skb的dev去不是null. 从oops到cra ...
- K8s小白?应用部署太难?看这篇就够了!
在云原生趋势下,容器和 Kubernetes 可谓是家喻户晓,许多企业内部的研发团队都在使用 Kubernetes 打造 DevOps 平台.从最早的容器概念到 Kubernetes 再到 DevOp ...
- Spring源码-xml解析
Spring使用SAX解析xml.SAX的全称是Simple APIs for XML,也即XML简单应用程序接口.与DOM不同,SAX提供的访问模式是一种顺序模式,这是一种快速读写XML数据的方式. ...
- 你必须学UML之理论篇
1.前言 对于当前社会背景下从事软件开发的工作者而言,"写代码"实际上并不是唯一的工作.特别在一些中小型的企业当中,这些企业往往对于开发者的要求,不单单停留在写代码完成相应功能上, ...
- java中的字符流知识点总结
java中字符流 字符流:对文本的读取,速度比字节流快 常见的字符流:Reader 和 Writer Reader是InputStreamReader的父类,InputStreamReader是Fil ...
- session,cookie,jwt的简单使用
cookie的使用 https://blog.csdn.net/qq_58168493/article/details/122492358 session的使用 https://blog.csdn.n ...
- 【java】学习路径31-文件IO基本操作(未涉及到流)
一.初始化: File f1 = new File("//Users//Shared//JavaIOTest//Test01.txt"); File f2 = new File(& ...
- Flume 组件安装配置
下载和解压 Flume 实验环境可能需要回至第四,五,六章(hadoop和hive),否则后面传输数据可能报错(猜测)! 可 以 从 官 网 下 载 Flume 组 件 安 装 包 , 下 载 地 址 ...
- 【设计模式】Java设计模式 - 反射机制
[设计模式]Java设计模式 - 反射机制 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 目录 [设计模式]Java设计模式 - 反射 ...