Tomact集群环境实现Session共享(使用Redis)

Tomacat集群环境下session对象如何实现共享

准备工作:四台虚拟机;一台安装nginx,两台安装Tomcat+JDK,一台安装redis

1、首先简单介绍一下session实现的底层原理

1.1 session是保存在服务器端,一次回话有效,关闭浏览器以及一定时间后失效;
1.2 底层原理:session底层是用cookie进行实现的;当浏览器第一次访问服务器,服务器会为该浏览器创建一个cookie对象(Cookie cookie = new Cookie(“JSESSIONID”,uuid))
并且返回给客户端保存到浏览器,同时服务器会创建一个session对象将客户信息保存到session对象中,并且底层操作map集合将发送到客户端的cookie对象的uuid作为键,session对象作为值存入map集合;
下次浏览器访问这台服务器会携带该Cookie对象,服务器接收到Cookie对象通过该cookie对象中的uuid在map集合中查找session对象;通过这个过程实现对session作用域的操作
图片1

2、Tomcat集群环境下操作session作用域暴露的问题

图片2
2.1 浏览器第一次访问某个应用,nginx(这里忽略ip黏着celue)会根据轮询的方式将请求发送到某台服务器上,该服务器会根据session的实现原理在该服务器上新建一个session对象
2.2 当浏览器又一次访问时,如果nginx将请求发送到另一台服务器,这时该服务器会根据浏览器携带的cookie进行查找,但是并没有找到;这个时候该服务器会另外新建一个session对象保存到该服务器上,并且这次访问响应回去的cookie会覆盖第一个访问的cookie;这时就会出现这样一个问题:明明是同一次回话,但是会出现服务器无法识别用户,也就是session对象无法实现共享

3、使用redis解决Tomcat集群环境下session对象无法实现共享的问题

3.1 安装redis

3.1.1 redis是C语言编写,需要安装gcc(C语言的编译工具)

yum install gcc

3.1.2 上传redis安装包(前提是要有)到/opt包下
3.1.3 解压

tar -zxvf redis.tar.gz

3.1.4 进入解压后的目录,执行 make 编译
3.1.5 修改 redis.conf 配置文件

 vi redis.conf
在命令行状态输入  /appendonly    将appendonly no   修改为 appendonly yes

3.1.6 进入redis中的src目录

 ./redis-server  ../redis.conf

出现以下画面即为成功
图4
3.1.7复制一个选项卡,进入redis中的src目录下

执行 ./redis-cli

:停止redis服务

1. ./redis-cli shutdown
2. ps-ef   然后查看redis服务的pid  kill-9 pid

3.2演示session不共享会出现的效果

3.1.1 搭建nginx、tomcat-1、tomcat-2以备测试
3.1.2 在两台tomcat中分别创建一个名字相同的项目demo(在tomcat中的webapps下)
3.1.3 将编写的login.jsp 和 index.jsp上传到demo项目中
图1
图二

3.3 使用redis实现session共享

3.3.1 将下边三个jar包(没有自己想办法)上传到tomcat的lib目录(两台安装tomcat的虚拟机都要安装)
图三

3.3.2 修改tomcat中conf目录下的context.xml配置文件
修改host为redis数据库所在服务器的ip地址
图四
3.3.3重启两台tomcat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值