tomcat+memcache结合实现session共享

普通的项目部署,如果使用一台tomcat,那么就不存在什么session共享的问题了,如果后台部署了多个tomcat,那么多个tomcat之间需要考虑这个问题,session共享。默认tomcat的session信息是存储在本机的,所以多个tomcat,就造成了session有可能不一致的情况,如果不考虑session共享,那么,我们的页面有可能是这样的。

webapp/ROOT/session.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<BR>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<BR>

因为session存储在各自不同的目录下,我们在同一个浏览器中打开两个tab页面访问不同的tomcat,得到的就是两个服务的session不一样。 

解决session共享的问题有很多,这里介绍如何使用memcache来做session管理。这里准备一个虚拟机,启动两个tomcat,端口分别为8080和8090,模拟多个tomcat部署的情况。

1、准备jar包:

kryo-3.0.3.jar
reflectasm-1.10.1.jar
minlog-1.3.0.jar
objenesis-2.1.jar
memcached-session-manager-tc8-2.1.1.jar
memcached-session-manager-2.1.1.jar
kryo-serializers-0.41.jar
protobuf-java-2.6.1.jar
msm-kryo-serializer-1.9.7.jar
spymemcached-2.11.1.jar

以上这些jar包均加入到tomcat/lib目录下。

2、多个tomcat均做相同的配置,配置tomcat/conf/server.xml配置文件的Context:

在server.xml配置文件的最后,增加一个Context的配置:

<Context docBase="ROOT" path="" reloadable="true" >
              <Manager
                 className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                 memcachedNodes="n1:127.0.0.1:11211"
                 sticky="false"
                 sessionBackupAsync="false"
                 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js|html|htm)$"
                 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
              />
</Context>

配置截图:

3、启动memcache:

memcached -u root -p 11211 -d -m 64m

启动成功之后,会监听本机的11211端口。

4、启动多个tomcat:

再次验证session:

无论怎么刷新和切换tomcat,只要在一个浏览器中打开的tab页面,最终的session都是不会改变的。 

这种和业务分开的session共享实现方式已经很少使用了,现在session管理都提到了业务代码里面,直接通过redis来管理session,而且登录之后,session和用户关联,如springboot+shiro+redis,它编码部署之后,直接使用内置的tomcat或者jetty启动,无需再考虑部署容器与session的关系了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值