全称
前置知识
cookie
服务器向客户端发送端一段Token
当客户端接收之后,**后续的请求(同一域名下)**都要带上这一段cookie:Token
cookie 的作用就好比服务器给你贴个标签,然后你每次向服务器再发请求时,服务器就能够 cookie 认出你。
设置cookie过期时间
cookie字段很大怎么办
首先,cookie 字段是存储在 HTTP header 中的,如果存储很多信息,比较消耗网络资源和宽带。
那么 session 就可以解决这个问题!
session
session 是一个数据结构,由网站的开发者设计,所以可以承载各种数据,用来保存用户状态(会过期)
刚才cookie存储了一个如sessionId,服务端就可以找到它并找到它对应的session,这样cookie与session结合就好了。
只要客户端的 cookie 传来一个唯一的 session ID,服务器就可以找到对应的 session,认出这个客户。
cookie和session的区别
session安全性好一点、存储在服务端;cookie存储在客户端
Cookie 只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。
Cookie 可预先设置为长时间或永久保持,比如我们经常使用的记住密码功能就是使用永久cookie写在客户端电脑,下次登录时,自动将cookie信息附加发送给服务端,Session 一般有效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。
单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。
JWT结构
Header头
写算法名称
{
'alg': "HS256",
'typ': "JWT"
}
Payload体
{
"sub": '1234567890',
"name": 'john',
"admin":true
}
Signature签名(秘文)
加密(私钥,base64(header),base64(body))
最终token格式
const token = base64urlEncoding(header) + '.' +base64urlEncoding(payload) + '.' + base64urlEncoding(signature)