Cookie.Session到Token和JWT
一、session和cookie:
现在一般都是session和cookie一起用,一起提。但是他们俩其实不是一定要在一起。
session的产生原因是,http协议是无状态的
这就导致了,不同的用户在操作时,服务端无法知道是哪个用户发来的请求,为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式
session的使用流程一般为:
1.用户在客户端登录后,服务器会跟据用户信息生成一个sessionID
2.然后会把session存储在redis,数据库等存储媒介中
3.然后通过设置cookie的方式返回给客户端,既存放在浏览器的cookie中
4.客户端在下一个请求时,会带上cookie中的sessionid
5.然后服务端根据sessionid去查redis或者数据库,进行验证,来到达用户校验的目的
session存在的问题:
1.如果是单一的服务器,那么使用session没有问题,但是如果是集群服务器的话,那就要做session同步了,如果是4-5台服务器还是可行的,但是如果集群有上百台呢,这样session同步就会难以接受,极大的增加了服务器的性能开销
2.于是有人就想出,为session独立部署一个服务器,然后其他服务器访问这个session服务来进行存取和验证逻辑,这样就不需要做session同步了,但是这样也存在风险,万一这台服务器挂了,那整个系统都会受到牵连。
3.那么为这个session服务器再扩展,也做成集群-session集群,这也是一种可行的方案,但是非常累人
session是服务器端的,cookie是浏览器端的cookie只是实现session的其中一种方案。虽然是最常用的,但并不是唯一的方法。禁用cookie后还有其他方法存储,比如放在url中现在后端服务都是分布式部署,session一般统一放在redis集群中。这样有个问题就是一旦redis故障,可能会影响所有的用户请求。所以,在后台进行session的存储和运维这件事是非常重要和危险的,对可靠性的要求非常高。
二、Token:
为了解决session产生的问题,所以有了token,token意为“令牌”.
简单来说,就是服务端把用户信息通过加密算法和一个只有服务端知道的密钥,来生成一个字符串,这个就是token.
然后客户端下一次请求时带上这个token,服务端拿到用户信息后通过相同的算法和密钥,生成一个新的token和用户请求里携带的token进行比对,来完成用户验证。
token的流程一般是这样的:
1.客户端使用用户名跟密码请求登录,
2.验证成功后,服务端会通过加密算法,如HMAC-SHA256,然后通过一个只有服务端知道的密钥,来生成一个token
3.服务端再把这个Token发送给客户端,服务端不会保存token
4.客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
5.客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
6.服务端收到请求,然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息
session时通过把所有session存起来,而token则是通过算法和密钥来验证。这样的话就解决了session的问题,服务端不需要在存储任何信息了, 扩展起来就更方便。
三、JWT
JWT意为JSON Web Token ,可以理解成是一种特殊的token,也可以理解成是根据token的思路发展出来的一种具体的解决方案
Jwt原理和实现:https://www.cnblogs.com/zhangyafei/p/12855294.html
JWT 的几个特点
JWT 默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。
JWT 不加密的情况下,不能将秘密数据写入 JWT。
JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。
JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。
为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输。
Cookie.Session到Token和JWT的更多相关文章
- 傻傻分不清之 Cookie、Session、Token、JWT
傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...
- 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚
还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...
- 授权认证登录之 Cookie、Session、Token、JWT 详解
一.先了解几个基础概念 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份. 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只要你能收到邮箱/验证码,就 ...
- Cookie、Session、Token与JWT(跨域认证)
之前看到群里有人问JWT相关的内容,只记得是token的一种,去补习了一下,和很久之前发的认证方式总结的笔记放在一起发出来吧. Cookie.Session.Token与JWT(跨域认证) 什么是Co ...
- 对cookie,session,token,jwt的理解
对这几个东西有点凌乱了,今天有时间整理下 cookie Cookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便 ...
- Cookie、Session、Token、JWT
什么是认证(Authentication)------->就是验证当前用户的身份,证明"你是你自己" 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只 ...
- Cookie Session 与Token
由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ...
- 一文搞懂Cookie,Session,Token,JWT
HTTP协议是无状态的,无状态意味着,服务器无法给不同的客户端响应不同的信息.这样一些交互业务就无法支撑了.Cookie应运而生. Cookie 通过F12开发者工具,先瞅瞅Cookie的颜值 从图中 ...
- 彻底搞懂Cookie、Session、Token到底是什么
洛:大爷,楼上322住的是马冬梅家吧? 大爷:马都什么? 夏洛:马冬梅. 大爷:什么都没啊? 夏洛:马冬梅啊. 大爷:马什么没? 夏洛:行,大爷你先凉快着吧. 在了解这三个概念之前我们先要了解HTTP ...
随机推荐
- 多个工作簿拆分(Excel代码集团)
一个文件夹里有N个工作簿,每个工作簿中包括N个工作表,将各个工作表拆分成工作簿,命名为每个工作簿里第一个工作表的A列和B列. 工作簿.工作表数量不定,表内内容不限,拆分后保存于当前文件夹下的" ...
- 小迪安全 Web安全 基础入门 第七天 - 资产泄漏、CMS识别、Git监控、SVN、DS_Store、备份
一.CMS指纹识别源码获取方式 1.网站特有文件.如/templets/default/style/dedecms.css-dedecms. 2.网站独有文件的MD5.如favicon.ico但是该文 ...
- LuoguP2097 资料分发1 题解
Content 有一些电脑,一部分电脑有双向数据线连接.如果一个电脑得到数据,它可以传送到的电脑都可以得到数据.现在,你有这个数据,问你至少将其输入几台电脑,才能使所有电脑得到数据. 数据范围:\(n ...
- IPV4和IPV6 特殊地址块
https://en.wikipedia.org/wiki/Reserved_IP_addresses https://blog.csdn.net/tty521/article/details/725 ...
- mysql联合查询更新数据库例子
mysql联合查询更新数据库例子,用户表,部门表,把用户表中的部门属性更新为部门表的主键UPDATE user_table AS utINNER JOIN belongdept AS bd ON bd ...
- 当通过Struts2传值给后台时,如果是外键,传字符串那么会出现错误
当通过Struts2传值给后台时,如果是外键,传字符串那么会出现错误 如<input type="text" name="user.department" ...
- 查找局域网中未知设备的IP
先运行net view,然后再运行arp -a 设备启动前后对比IP列表
- windows平台使用 pthreads库
note 近日封装一些跨平台库时, 发现线程的创建需要做平台的区分, windows的线程创建和Linux下的线程操作不一样.很麻烦,还要做平台区分. 能否在windows上使用pthread的线程库 ...
- 【LeetCode】145. Binary Tree Postorder Traversal 解题报告 (C++&Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 迭代 日期 题目地址:https://leetc ...
- 【九度OJ】题目1087:约数的个数 解题报告
[九度OJ]题目1087:约数的个数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次 ...