场景:
登录一次后,很长时间不再需要用户名、密码。
http是无状态的
解决办法:
cookie在每一次http请求中,自动加上用户名、密码。
具体流程
浏览器发起http请求,服务器会进行cookie设置,即set-cookie,里面有名、值,服务器会把名、值内容填充完整,cookie发给浏览器后,浏览器会保存起来,浏览器以后的每次请求都会自动附上这个cookie
缺点
网页可以查看到cookie,不安全
会话:结束会话的时间、唯一的sessionId
具体流程
用户名、密码发送给服务器,服务器身份验证成功后,创建sessionId、会话结束时间,然后把sessionid放入set-cookie,结束时间则为cookie的有效期,发送给浏览器,浏览器保存,注意保存的不是用户名、密码。
注意:服务器在发送cookie前会对其签名
浏览器每个请求发送cookie,直到cookie失效,用户需要再次输入用户名、密码。
缺点
访问量大时,服务器需要存储大量sessionId
技术:jwt
Json Web Token
token诞生在服务器,保存在浏览器
服务器只保存jwt签名的密文
具体流程
用户登录,服务器生成jwt,但不保存,只需保存jwt签名的密文,发送jwt到浏览器,浏览器以cookie或storage的形式存储,假设以cookie的形式保存,以后每次请求携带jwt。token是存储在浏览器的。
token组成:header.payload.signature
header:声明生成签名的算法
payload:特定的数据,比如有效期
header和payload进行base64的编码,不是加密,所以很好解码,服务器保存一段密码,密码和这两个编码进行算法运算,最终得到签名。这个签名就是signature
cookie是一种数据载体



