场景: 登录一次后,很长时间不再需要用户名、密码。 http是无状态的
解决办法:
cookie
在每一次http请求中,自动加上用户名、密码。
具体流程 浏览器发起http请求,服务器会进行cookie设置,即set-cookie,里面有名、值,服务器会把名、值内容填充完整,cookie发给浏览器后,浏览器会保存起来,浏览器以后的每次请求都会自动附上这个cookie
缺点 网页可以查看到cookie,不安全
session 会话
会话:结束会话的时间、唯一的sessionId
具体流程 用户名、密码发送给服务器,服务器身份验证成功后,创建sessionId、会话结束时间,然后把sessionid放入set-cookie,结束时间则为cookie的有效期,发送给浏览器,浏览器保存,注意保存的不是用户名、密码。 注意:服务器在发送cookie前会对其签名 浏览器每个请求发送cookie,直到cookie失效,用户需要再次输入用户名、密码。
缺点 访问量大时,服务器需要存储大量sessionId
token
技术: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是一种数据载体
|