HTTP:是无状态的,每次访问都会重新请求与验证。
Cookie:服务器setCookie,之后浏览器每次请求都会带着这个字符串(公开,且不安全)
Seesion:seesionID和会话结束时间
过程:
1、初次登录,服务器确定信息无误后,设置ID和会话结束时间,键值对形式存放在cookie里。
(服务器会在发送之前对该cookie进行签名,一经修改,不再识别。)
2、再次请求,cookie自己特性会在每个请求时,自动发送cookie到相应的服务器那里。
(即每次请求都会自动把sessionID发给服务器)
(cookie失效时,浏览器会自行删除cookie,会话结束。)
Token:(JWT:JSON Web Token)
过程:
1、首次登录,服务器生产JWT,服务器只保存JWT签名的密文;将JWT发送给浏览器。
浏览器进行存储(Cookie或者Storage形式)
2、再次请求,cookie特性自动发送JWT到服务器。
(这里类似于session,但Token存储在用户那边)
JWT完整的是:header.payload.signature
1、header(键值对):指定生成签名的算法 --经过Base64编码--> 编码
2、payload(键值对):特定数据(例如有效期)--经过Base64编码--> 编码
3、signature:由1、2形成的编码经过算法(header指定的算法)得出的密文(要保存在服务器的签名密码)
总结:Session诞生并保存在服务器,由服务器主导。
Cookie作为一种数据载体,把Session放到Cookie中送到客户端(即浏览器),之后Cookie跟随HTTP的每个请求发送到服务器。
Token诞生在服务器,但保存在浏览器,由客户端主导。(存储为Cookie或Storage形式。持有Token便可以允许访问服务器)
笔记来自b站视频