`Session`和`Token`、`Cookie`
HTTP 协议是一种无状态协议,每次服务器接收客户端的请求的时候都是一个全新的请求,服务器是不知道历史的请求记录;Session和Cookie就是弥补没有状态的特性
- Session是什么
客户端请求服务端,服务端会为这次请求开启一块内存空间,这个对象便是Session对象,存储结构是ConcurrentHashMap。服务器可以利用Session存储的客户端在同一个会话期间的一些操作记录 - Session判断是否为同一个会话
服务器在第一次接收带请求的时候,在开启Session空间的时候同时也会生成一个sessionId,并通过响应头的`Set-Cookie : JSEESIONID=XXXXXX 命令,向客户端发送要求设置Cookie的响应;客户端收到响应之后在本机设置了一个JSESSIONID=XXXXXXX的Cookie信息,该cookie信息的过期时间就是浏览器会话结束时间;
Session的缺点
在Session中有一个机制,比如A服务器存储了Session,在一段时间内A的访问量增加过快,会转发到B服务器进行访问,但是B服务器是没有存储A的Session ,就会导致Session失效
Cookie是什么
Http协议中的Cookie包括Web Cookie和浏览器 Cookie, 他是服务器发送到 Web 浏览器的一小块数据。服务器发送到浏览器的Cookie ,浏览器会进行存储,并与下一个请求一起发送到服务器。通常是用来判断两个请求是否来自于同一个浏览器。比如:保持用户登录状态。
Cookie的用途
- 会话管理 -- 登录、购物车、游戏得分或则是服务器应该记住的其他内容
- 个性化 -- 用户偏好、主题等
- 追踪 -- 记录和分析用户行为
JSON Web Token -------- JWT
JWT和Session 都可以为网站提供用户的身份认证;JWT 也称为Json令牌 ,其存储的星信息是经过数字签名的,可以用来认证Authorization 和信息交换Information Exchange;本质上就是加密之后的身份信息(一串加密的字符串);
特点:
- 用户信息全部加密放入到了token内部,不需要服务器额外存储会话数据
- Token 最终全部存储在客户端
JWT 和 Session Cookie的不同
- 密码签名 : JWT 具有加密签名,而Session Cookie 则没有
- 状态 : JWT 是无状态的,存储在客户端,可以在本地进行验证
- 扩展性 : Session Cookie 是存储在服务器上的,消耗的资源会更多,所以 JWT 的扩展性更好
- 认证 : JWT 支持跨域认证 ,Session Cookie 只能在单个节点的域中有效
- 使用范围 : 对于只需要访问登录存储在站点数据库中的一些信息的中小型网站来说,Session Cookie足够使用;如果需要处理的是大量的请求,尤其是第三方或则是位于不同的域的API ,JWT更加合适
注:
禁用Cookie,如果使用 Session?
- 禁用了Cookie, 服务器仍然会将
sessionId以Cookie的方式发送给浏览器,但是浏览器不保存这个cookie(也就是sessionId)- 如果需要继续使用session,需要采用
URL重写的方式来实现

浙公网安备 33010602011771号