会话机制 Q&A
概念解析
无状态http引入的有状态机制以及其生命周期
session
后端创建管理的会话信息
cookie
cookie 由服务端指定生成,后端可以设置路径。但是客户端可以查看修改(除非使用httpOnly属性),存放在内存中,也可以持久化到硬盘。大小限制为4KB,存在数目限制(最多为20条)
下面两种为web storage,浏览器端使用的存储机制。大小可以达到5MB,比cookie大很多,不会主动随请求发送到后端
session storage
限定同个标签页内,同源网站存在。关闭标签页后删除。属于浏览器api
local storage
浏览器关闭后会持久化保存,限制同源网站存在。属于浏览器api
同源策略
协议 + 主机IP + 端口 相同
session 跨域问题与分布式集群微服务架构下的session问题
跨域问题
主要针对 ajax/js 请求会违背同源策略,即对非当前同源的地址发送请求。session跨域问题
处理方案:
-
后端设置允许跨域,同时浏览器支持
-
jsonp
-
... (前端方法)
微服务架构下的session信息管理
由于微服务架构下微服务存在容器化集群化的特点,不能将session统一存放到各自独立的web容器中进行管理。目前推荐的方式为
1.使用 spring-session 将session存放至mysql/redis等存储中进行保管存放
2.使用 token 机制进行用户认证 (即jwt + redis)
spring-session
待考察
JWT
分为三段存储,header/payload/signature,生成的token不可以使用私密数据,仅作为凭证使用。前两段数据都是可以使用base64进行解码然后hexstring转utf8得到原始报文的,最后一段则需要服务器密钥,因此服务器可以借此来对签发的token进行验签。
优点
轻量级,而且适用于微服务架构下的服务认证调用。
缺点
不能管控确认客户端情况的问题,如果需要对客户端使用作限制,需要引入额外的一些机制。会增加传输成本和性能消耗。
Q.E.D.