在http访问请求中,web服务器会自动为同一个浏览器的访问用户自动创建唯一的session,提供数据存储功能。最常见的,会把用户的登录信息、用户信息存储在session中,以保持登录状态。
只要用户不重启浏览器,每次http短连接请求,理论上服务端都能定位到session,保持会话。
当只有一台web服务器提供服务时,每次http短连接请求,都能够正确路由到存储session的对应web服务器。
多台web服务器来保证高可用时,每次http短连接请求就不一定能路由到正确的session了。假设用户包含登录信息的session记录在第一台web服务器上,而反向代理将之后的请求路由到另一台web服务器上了,这样就找不到已登录的session相关信息,而导致用户需要重新登录。
可以用以下几种方法处理:
1、session同步法
多个web服务器之间相互同步session,这样每个web服务器之间都包含全部的session。
问题:session的同步需要数据传输,占内网带宽,有时延
2、客户端存储法
服务端存储所有用户的session,内存占用较大,可以将session存储到浏览器cookie中,每个端只要存储一个用户的数据了。
问题:数据存储在端上,并在网络传输,存在泄漏、篡改、窃取等安全隐患
3、反向代理hash一致性
反向代理层使用用户ip来做hash,以保证同一个ip的请求落在同一个web服务器上。
4、后端统一存储
采用redis、memcache、mysql统一存储session.