cookie vs session vs jwt 区别

1.什么是cookie
cookie特点和应用场景cookie获取和设置
首次访问浏览器向服务器端发送请求 server生成cookie信息
cookie传给client保存 再次访问 浏览器把cookie发送给服务器 保存request对象的cookies
cookie是会话追踪技术 有服务器产生将数据信息传递给客户端浏览器的一个键值对
1.cookie是标准的键值对 /字典/ 以键值对的方式存储 键值都是字符串
2.浏览器访问网站时将自带的cookie对服务器端进行请求request.COOKIE
3.cookie基于域名安全的 需要指定过期时间 否则会在关闭浏览器之后cookie就会失效
4.单个cookie保存的数据不超过4k 很多浏览器都限制一个站点保存20个cookie
应用场景记录用户登陆注册的用户名和密码  安全性要求不高

2.session是什么
浏览器向服务器端发送请求 服务器生成cookie 且设置session信息
sessionid---* session_key / session_data
服务器像浏览器发送session唯一标识符之后向服务器端请求数据就会获取sessionid
根据sessionid的值取出相对应的session信息
request.session属性中请求进行响应
session保存在服务器端 使用提取从服务器端获取session唯一标识符进行提取session数据和cookie存储
服务器把客户端信息保存在服务器上 使用的时候根据sessionid提取
客户端浏览器需要使用session数据时
只需要该sessionid查找给客户的状态就可以了

1.session以键值 key value对存储 name:jackson password:19980105
2.session依赖于cookie 如果说客户端请求的时候根据sessionid来进行提取的 唯一的标识码存储在cookie中

3.有过期时间 默认过期时间是两周 使用base64加密
4.应用场景 安全性极高的 银行密码以及私密性很强的
cookie和session的相同点
都是以键值对的形式存在的
都是跟踪浏览器用户身份的会话方式
不同点
cookie浏览器 不安全 默认关闭浏览器之后就会失效
session服务器 安全加密base64      两周之后会失效
session依赖cookie的将唯一标识码sessionid存储在cookie中
3.jwt是什么
jwt json web token  登陆注册访问服务器生成json加密的格式数据
json格式字符串对象形式的安全通信方法
由头部 header / 负载 payload / 签名 sign 三部分组成
jwt的特点是简洁
通过url/post表单提交/文件传输
或在http  request 等的方式直接将数据传送  因为数据量小传输速度快
自包含 负载中包含了所有用户所需信息 避免了多次查询数据库
jwt的工作原理
jwt认证 登陆的时候验证用户名密码是否正确匹配
验证通过生成jwt进行保存到本地
跳转到登录页面请求api 过滤器拦截请求验证jwt
通过 业务逻辑操作并返回数据 在浏览器展示数据
未通过 返回错误信息 提示错误 跳转回登录页面
1.客户端输入正确的用户名密码之后进行post请求ssl加密实现https请求数据
确保数据安全 防止数据泄露
2.服务端接收到信息之后将用户id等其他信息作为jwt payload负载
将其与头部信息进行base64编码拼接之后签名形成jwt
形成的jwt就是一个 aaa.bbb.ccc 的字符串  并设置有效时间
3.服务端将jwt加密字符串作为登陆成功的返回结果传递给客户端
4.客户端将返回的jwt字符串以cookie的形式存储在浏览器端
设置cookie的过期时间
即用户登出的时候客户端删除cookie
5.客户端在每次请求时将jwt放入http header中的authorization
6.服务器接收到jwt之后解密校验 检查签名是否正确 token是否过期 token的接收方是否自己
token就是浏览器中的令牌
进行网络传输
7.验证通过后服务端使用jwt中包含的用户信息进行逻辑验证 返回相应的结果 否则返回401
4.session和jwt存储id的区别
session存储id
存储在服务器端占据大量服务器内存较大型应用而言可能还要保存许多状态
以键值对的形式存储 key - value 和缓存机制来实现session的存储
需要获得客户端存储在session中的数据就要用cookie中的sessionid这个唯一标识符来获取
jwt加密签名验证
存储在客户端
将用户状态分散在客户端
减少服务器查询数据的次数和减轻服务端的内存压力
可存储是否是管理员和用户所在的组进行验证
jwt会进行加密解密编码