cookie
是存在于浏览器的一个凭证
- 当浏览器第一次访问服务器 , 会在服务器创建一个cookie
- 再返回浏览器
- cookie里面有用户的所有信息
- 当用户再次访问服务器时 , 携带着cookie(一个凭证)
- 服务器根据携带的cookie信息不同分别不同用户
session
- 浏览器访问服务器的时候 , 服务器创建一个session , 同时生成一个特殊的cookie , (name为JSESSIONID的固定值,value为session对象的ID)发送到浏览器端
- 浏览器再次访问服务器时 , 带着那个有固定name的cookie
- 服务器根据name去查询session里的id , 从而区分不同用户
cookie 和session区别
- cookie 保存在浏览器 session保存在服务器
- session要更安全 如果截获一个cookie并重新伪造一个数据包 , 服务器分辨不出来 , cookie有安全问题
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE
- 单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
- 所以:将登陆信息等重要信息存放为session;其他信息如果需要保留,可以放在cookie中
jwt
JSON Web Token(JWT)
含义 :
- jwt本质就是服务端把用户信息加密后生成一个字符串返回给浏览器
- jwt 存在客户端, 由后端生成的, 传递给前端, 存在本地存储
- 特殊的JSON
- 每次访问服务器都会带着
使用 :
组成 :
- jwt由jwt头 , 有效载荷 , 签名构成
- jwt头 是一个描述JWT元数据的JSON对象
- 有效字段 是用户没有敏感字眼的信息
- 签名 是对前面两部分内容签名 , 确保信息不会被篡改
- 头部 和 有效字段是安全性相关的部分,只是为了保证 Token 的安全性。
- 客户端收到服务器返回的 JWT 之后,通常会将它储存在
localStorage
或sessionStorage
中。
此后,客户端每次与服务器通信,都要带上这个 JWT 的字符串,从而进行身份认证。推荐的做法是把 JWT 放在 HTTP请求头的 Authorization 字段中,格式如下:
三者的异同
同: 都是用来身份认证 就是通过一定的手段,完成对用户身份的确认。
异:
- Cookie和Jwt都是储存在浏览器的 , Session储存在服务器
- 安全性来说 , Jwt 和Session 比Cookie安全
- 如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口,用 Jwt。如果永远只是自己的网站,自己的 App,用什么就无所谓了。
- 在大多数使用Web API的互联网公司中,Jwt是多用户下处理认证的最佳方式。
- token就是令牌,比如你 授权登录一个程序时,他就是个依据,判断你是否已经授权该软件;
- cookie就是写在客户端的一个txt文件,里面包括你登录信息之类的,这样你下次在登录某个网站,就会自动调用cookie自动登录用户名;
- session和cookie差不多,只是session是写在服务器端的文件,也需要在客户端写入cookie文件,但是文件里是你的浏览器编号.
- Session的状态是存储在服务器端,客户端只有session id;而Jwt的状态是存储在客户端。
参考Cookie和Session的区别(面试必备)
node基础4-- MySQL的使用和前后端的身份认证
session 、cookie、token的区别