龙空技术网

redis实现共享session

乌猿 432

前言:

今天同学们对“nginx如何实现session共享”大致比较关切,小伙伴们都需要分析一些“nginx如何实现session共享”的相关资讯。那么小编也在网摘上汇集了一些对于“nginx如何实现session共享””的相关内容,希望同学们能喜欢,我们一起来学习一下吧!

通过一台服务器登录所生成的session可以和其他服务器共享

生产中每个部署多台服务器的项目,都会遇到用户已经登陆一台服务器了,但是再次进页面的时候浏览器又会让用户重新输入账号密码。根本原因是,用户每次进入页面都会被随机分配一个服务器,所以保存在上个服务器的用户信息,在当前这台服务器上不存在。

所以,怎么解决将session信息共享与多个服务器是一个问题。

这里采用redis来实现共享session:

为什么使用redis呢,因为redis的特性,他是基于内存,读写性能高,很适合这种用户信息频繁读取的情况。

还有一种方法,可以通过nginx的iphash实现,该方法非常简单,但是思路和上面两种不同,原理就是同一个ip的所有请求都会被nginx进行iphash进行计算,将结果绑定到指定服务器,之后这个请求都会访问到该服务器中。

但是这样就有一些问题,首先就算负载均衡就没有太大意义了,如果绑定的服务器挂了,那么iphash也就失效了;又或者你的请求被其他服务分发而未走nginx服务,那么iphash同样不生效;所以谨慎使用;

登陆接口代码如下:

login方法,主要是验证当前登陆用户输入账号密码是否存在,账号是否停用等一些权限,获取用户信息后,返回的userInfo就算当前用户的所有 信息。

随后开始获取授权token,后端创建token存入redis并返回给前端一份用于判断用户是否登陆。

每次用户登陆都会刷新一次令牌并再次存入redis:

整体流程:

后端获取用户信息也是如此:

前端传递token,后端根据该token获取用户标识:

再根据用户标识去redis中获取用户登陆信息:

标签: #nginx如何实现session共享 #nginxsession权限