在互联网的海量用户下, 高并发是第一要务,可以通过分布式来解决, 但分布式会带来用户session共享的问题, 今天我们就来探讨一下如果在高并发情况下,解决session用户信息共享的问题
解决思路:
1. 用户在访问后台接口时,web网页与后台服务之间会产生一个sessionID
2. 此时我们在当前主域名下种下一个cookie, 名字可以设置"my_net_cookie", 值为sessionID
3. 然后sessionID与用户对应的信息存放在redis服务器, key=sessionID value=用户session信息
4. 用户使用主域名访问后台接口都会携带此cookie信息
5. nginx会充当一个反向代理的角色
6. 由于网站会有不同的功能模块,不同模块用二级域名对应
网站对应的流程图如下:
流程图逻辑
浏览器通过主域名session.com访问后台应用(8080端口), 后台应用在浏览器上种下一个cookie,
将cookie与用户信息存入redis
浏览器访问后台应用(8090),会带上步骤1种下的cookie, 从而能从redis上获取用户信息
这样只要通过session.com访问后台应用(分布式集群), 所有后台应用都能得到正确的用户信息
未解决问题
1. 当使用gpj.session.com二级域名直接在地址栏中访问后台应用,也能获取对应的cookie信息
2. 但在session.com对应的页面中使用gpj.session.com通过ajax访问后台应用, 对应的cookie信息无法获取
实例包含内容:
运行步骤
将html中的内容放在nginx下面的html目录同级, 其它将html/test3中的node/node_modules复制到html/test1, html/test2目录下, node_modules是vue模块
SpringClound为后台应用, 包含Eureka和对应的应用, 先启动Eureka, 再启动应用
nginx.conf为相应的反向代理配置