一般有三种解决方案
IP分流
会话复制
会话共享(推荐)
IP分流
这个技术我曾经在我的个人博客中用过,简单方便。
优点
服务端代码不用变
Nginx只需要加个ip_hash的配置
缺点
会破坏Nginx的负载均衡
当某个服务器挂了的时候,服务器所在用户也会退出登录状态
服务器重启时,用户需要重新登录
会话复制
这个我没用过,据说就是把session在所有服务器上都复制一份,且服务器数量太多时容易出问题,由于没用过,暂不讨论。
会话共享
既然是共享,共享到哪?当然是共享到redis了。
缺点
实现麻烦
优点
不会破坏负载均衡
没有服务器节点的数量限制
拓扑图
实现
登录成功
生成一个定长的随机字符串作为JSESSIONID,当然了,随机字符串并不能保证唯一,所以在后面再加一个自增的数字,这个自增的数字可以放在redis中
用JSESSIONID作为key,用户信息作为value,有效期30分钟,存入redis
像客户浏览器中写入cookie,其key为“JSESSIONID”,value为JSESSIONID的值。
登录验证
从请求中找出key=“JSESSIONID”的cookie,用它的值作为key去redis中查找用户的登录信息。
验证码等用户零时信息
生成验证码
从请求中找出key=“JSESSIONID”的cookie,其实就是JSESSIONID
把验证码放入redis,他的key=JSESSIONID + “:code”,最好设置有效期
校验验证码
从请求中找出key=“JSESSIONID”的cookie,其实就是JSESSIONID
从redis中找出验证码,key=JSESSIONID + “:code”
用过之后删除redis中的验证码
领取专属 10元无门槛券
私享最新 技术干货