- Session就是后端生成的一个唯一值,常用的就是后端生成一个guid返回给前端,这个guid被称为sessionId,大概的实现就是先验证登录信息,登录信息验证成功,后端生成sessonId,返回给前端,后端经sessionId存储到自己能读取的地方,之后,前后端交互就要校验sessionid,从这个层面上来说,sessionId就是一个通行证,并且通行证很有可能是带有效期的。
- 对于分布式集群环境,Session数据保存在服务器内存中显然是不对的,因为多个后端服务节点,是没用办法共享内容的,所以这时候,session数据应该放到一个中心状态服务器上,一般就是Redis、Memcached等
- 中心状态服务器在大规模系统中,其实也会有性能问题
基于以上对session的介绍和分析,在实际开发中,后续引入了JWT(JsonWebToke)的概念
- JWT把登录信息(也称作令牌)保存在客户端
- 为了让防止客户端的数据造假,保存在客户端的令牌经过了签名处理,而签名的密钥只有服务端才知道,每次服务端收到客户端提交的令牌的时候,都要检查一下签名
Session跟Jwt的区别在于,sessionId后端生成后,后端都需要存储,一般通过登录名(或用户id)作为key来存储sessionId,前端请求到后端,后端需要根据用户登录名(或用户id)作为key去读取相关sessionId,并验证其是否过期。
而JWT是后端生成,前端存储,后端无需存储,前端传递给后端之后,后端需要经过算法,才能知晓令牌是否合法,是否过期;这时令牌其实是密文令牌。
基于上边的介绍,我理解jwt是用计算资源换取了后端的存储资源,这样,不需要和中心状态服务器进行通讯,性能会更高;而且也不会再出现中心状态服务器的性能瓶颈问题,更容易平行拓展。由于签名技术保证了客户端无法数据造假,
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器