面试题—Session共享的方式
提问方式:如果你负责一个高流量的网站,需要确保用户在负载均衡环境下Session不丢失,你会怎么做?
假如用户在其中一个节点登录了网站,在这个网站存储了Session数据,但是由于访问压力,下一次用户通过了另一个节点访问网站,又需要重新登录记录session,非常影响用户体验。
解决方式一:粘滞会话
粘滞会话,是在一段时间内通过将同一个用户的请求始终路由到同一台服务器来保持会话状态,确保连续的用户体验。
解决方式二:会话复制
会话复制是一种在服务器集群中同步会话状态的机制,确保用户会话数据在所有节点间一致,允许用户请求在任何节点上得到正确处理。
解决方式三:集中式存储Session
将session数据存储在数据库中,这样可以实现多台服务器之间的共享。但是可能导致资源占用高、性能瓶颈,并在分布式环境中增加管理复杂性和扩展性限制。
解决方式四:基于Token认证(JWT)***
JWT通常由三部分组成:
头部(Header)通常由两部分组成:令牌的类型(即JWT)和所使用的签名算法,例如HMAC SHA256或RSA。
负载(Payload)存储有关实体(通常是用户)和其他数据的信息。
签名(Signature)验证令牌的发送者是否为其声称的发送者,并且令牌在传输过程中没有被篡改。
JWT作为一种无状态的令牌,可以轻易地跨服务传递,不需要服务器间的任何额外协调。这意味着只要客户端持有有效的JWT,它就可以在多个服务之间进行身份验证,无需依赖于特定的服务器来维护会话状态。
JWT存储在localstorage中,前端每次向服务器发送请求通过请求头传递token供后端验证和解析。