cookie session jwt-token
http是无状态的,即请求之间是相互独立的;即提供用户名/密码验证后,下次还需要再次提供
而cookie就是解决这个问题的
cookies
服务器验证通过后,在响应头中设置set-cookies,浏览器就会把cookies写入本地
客户端之后请求时,就会自动带上cookies,服务器端验证即可
缺点:
但cookies中的信息都是暴露的,不安全
session
服务器验证通过后,在浏览器上写入的是sid,这个sid在服务器的数据库中对应着这此用户的信息
sid是无意义的字符串,浏览器只保存着sid
缺点:
session保存在服务器端,通常在内存中,认证用户增多后会对服务器造成压力
在分布式系统中,用户在哪台服务器登陆的,以后就必须一直在这台服务器上验证,这就限制了负载均衡
jwt(json web token)
保存在浏览器端
过程:
1.用户登录请求,根据user模型,将user_id/username/expire作为载荷(django中),产生jwt-token
2.浏览器将token保存(可以保存在cookie中,也可以保存在本地存储中)
本地存储提供两种方式:localStorage,长期有效;sessionStorage,关闭浏览器失效

3.之后客户端发起请求时,在请求头中带上token供服务器端验证

jwt-token的构成,分为三部分
1.头部header,申明了类型即jwt和后面要用的加密方式;定义时为字典,后用base64编码形成第一部分
{
'typ': 'JWT',
'alg': 'HS256'
}base64编码:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
2.载荷payload,主要存放用户信息;定义时为字典,后用base64编码形成第二部分
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}base64编码:eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
3.签名signature,将前两部分用 . 连接,用头部申明的加密方式和secret组合加密,产生第三部分
var encodedString = base64UrlEncode(header) + '.' + base64UrlEncode(payload);
var signature = HMACSHA256(encodedString, 'secret');TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
4.将这三部分用 . 连接成一个完整的字符串,构成了最终的jwt
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
secret是保存在服务器端的,是用来签名和验签的,所以secret_key至关重要,相当于服务器的私钥,客户端要是拿到了secret_key就可以给自我签发jwt了(基本只要拿到简单的信息就可以模拟别人登录);所以绝对不能泄露出去
优点:
保存在客户端,减轻服务器压力,不影响负载均衡
可以在payload中放一些不敏感的数据
cookie session jwt-token的更多相关文章
- 存储机制 cookie session jwt token
cookieCookie的诞生 由于HTTP协议是无状态的,而服务器端的业务必须是要有状态的.Cookie诞生的最初目的是为了存储web中的状态信息,以方便服务器端使用.比如判断用户是否是第一次访问网 ...
- Cookie Session 与Token
由于HTTP是一种无状态的协议,服务器端无法知道用户与客户端交互的状态,比如如果一个用于之前已经访问过该服务器,服务器无法知道该用户是第二次访问,Session和Cookie都是用来保存用户与后端服务 ...
- Cookie.Session到Token和JWT
一.session和cookie: 现在一般都是session和cookie一起用,一起提.但是他们俩其实不是一定要在一起. session的产生原因是,http协议是无状态的 这就导致了,不同的用户 ...
- Blazor和Vue对比学习(进阶2.2.4):状态管理之持久化保存(2),Cookie/Session/jwt
注:本节涉及到前后端,这个系列的对比学习,还是专注在前端Vue和Blazor技术,所以就不撸码了,下面主要学习概念. 我们知道,Http是无状态协议,客户端请求服务端,认证一次后,如果再次请求,又要重 ...
- cookie,session和token的概念以及区别
cookie: 采用客户端保存状态的方案: cookie的组成:名字,值过去时间,路径以及域: 没有设置时间:随着浏览器的打开和关闭决定: 设置了时间:浏览器就会把cookie保存在硬盘上,根据时间来 ...
- Cookie、Session、Token那点事儿和前后端分离之JWT用户认证
(两篇文章转自:https://www.jianshu.com/p/bd1be47a16c1:https://www.jianshu.com/p/180a870a308a) 什么是Cookie? Co ...
- 傻傻分不清之 Cookie、Session、Token、JWT
傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...
- 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚
还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...
- 一文搞懂Cookie,Session,Token,JWT
HTTP协议是无状态的,无状态意味着,服务器无法给不同的客户端响应不同的信息.这样一些交互业务就无法支撑了.Cookie应运而生. Cookie 通过F12开发者工具,先瞅瞅Cookie的颜值 从图中 ...
- 授权认证登录之 Cookie、Session、Token、JWT 详解
一.先了解几个基础概念 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份. 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只要你能收到邮箱/验证码,就 ...
随机推荐
- com.sun.jdi.InvocationException occurred invoking
调试时候出现com.sun.jdi.InvocationException occurred invoking method 原因:因为hibernate的延迟加载引起 修改:修改hbm映射文件的对象 ...
- no main manifest attribute, in testProject-1.0-SNAPSHOT.jar
no main manifest attribute, in testProject-1.0-SNAPSHOT.jar 错误描述: no main manifest attribute, in tes ...
- RabbitMQ 在Windows环境下安装
1. 下载RabbitMQ和Erlang RabbitMQ下载地址 https://www.rabbitmq.com/install-windows.html RabbitMQ是用Erlang编程语 ...
- 错误:error: failed to push some refs to 'https://github.com/pzq7025/KG.git'的解决办法
一.问题在进行[git push orgin master]的时候出现如下错误 ! [rejected] master -> master (non-fast-forward) error: f ...
- 图解微信小程序---scroll_view实现首页排行榜布局
图解微信小程序---scroll_view实现首页排行榜布局 什么是scroll-view? 滚动视图可滚动视图区域.使用竖向滚动时,需要给scroll-view一个固定高度,通过 WXSS 设置 h ...
- 《 .NET并发编程实战》阅读指南 - 第14章
先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.
- APUE—UNIX文件系统
在linux系统中——一切都是文件. 1. 磁盘物理结构 磁盘的物理结构如下: 磁盘由很多盘面组成,而盘面上则是由很多同心圆环组成的磁道,每个磁道又被切割成许多扇区.所有磁盘面的同一个磁道构成一个柱面 ...
- 我得新博客上线了采用Vue+Layui的结合开发,后台采用asp.net mvc
地址:www.zswblog.xyz 写完这个博客项目我真的很开心! 希望博客园的大佬们能去看看,如果可以希望帮我在Layui的年度案例点一个赞,谢谢! 地址:https://fly.layui.co ...
- winfrom判断程序是否运行,并给提示
在Program.cs文件中修改为: private static System.Threading.Mutex mutex; /// <summary> /// 应用程序的主入口点. / ...
- office2016下载安装
https://jingyan.baidu.com/article/359911f5acfa4357fe030631.html