分类目录

登录

统计信息

  • 日志总数:229篇
  • 评论总数:360条
  • 分类总数:3个
  • 标签总数:501个
  • 友情链接:11个
  • 网站运行:2932天

西安市公共自行车 微信小程序 入口扫描,扫我进入~

个人信息

·网名:青年白
·生日:1991年9月17日
·博客: http://www.baikeyang.com
·邮箱:baikeyang@vip.qq.com
·籍贯: 陝西省汉中市
·工作: 杭州鸿泉数字设备有限公司
·职位:Java软件开发工程师
·地址:西安市高新区丈八一路绿地SOHO
·   同盟A座606室
·时间:2015.07─至今
·工作: 西安易一电子科技有限公司
·职位:Java中级软件开发工程师
·地址:西安市高新区科技二路软件园
·   西岳阁403室
·时间:2014.05─2015.06
·工作:陕西齐力集团
·职位:初级软件开发工程师
·地址:西安市建工路19号新城科技产业园
·   华企大厦7层
·时间:2013.05─2014.04
现在位置:    首页 > 技术乱弹 > 正文
部署在多个tomcat同一个项目在同一个浏览器中导致session失效问题
技术乱弹 暂无评论

最近在服务器部署环境时,发现了一个现象。同一个项目,部署在多个服务器:如果poi项目,部署在 192.168.6.56:8879服务器,8879服务器的项目解析域名为 www.adb.com;同时又部署在192.168.6.56:8869服务器,8869服务器的项目解析域名为 www.adb.com:8086。两台 。当在同一个浏览器同时打开两个服务器上部署的项目时,会出现会话失效的问题。

还有一种情况,差不多和上面这种情况一样。就是同一台服务器, 安装两个tomcat ,端口不一样, 姑且分别称为tomcat1 和 tomcat2, 在两个tomcat下分别都部署了poi项目。当在同一个浏览器同时打开两个tomcat服务部署的项目时,也会出现会话失效的问题。

在浏览器中,访问第一台服务器(PC Server 1)上的项目(或者tomcat1上的项目),这个时候tomcat给浏览器生成并返回了一个JSESSIONID, 同时创建了一个session, 此时JSESSIONID成为了用户访问 第一台服务器上的项目(或者tomcat1上的项目) 会话识别标志;

当我们再次新建一个窗口,访问第二台服务器(PC Server 2)上的项目(或者tomcat2上的项目)时,浏览器的request cookies 默认竟然是有JSESSIONID的, 同时又反回了一个新的JSESSIONID, 说明 PC Server 2 服务端(或者tomcat2)不存在这个JSESSIONID,所以重新创建了一个;以此作为和用户会话的依据, 然后再访问PC Server 1(或者tomcat1) 上的项目时, 同样的一幕出现了, 也是用了之前 PC Server 2 或 (tomcat2)返回给用户的JSESSIONID作为新的request cookies的JSESSIONID ,用作和服务端会话的依据, response cookies 又返回了一个新的JSESSIONID, 如此反复;

由此可看出,在同一个浏览器中访问两个部署在不同服务器的同一个项目,本地的存储的JSESSIONID是不断相互覆盖的。导致访问后一个服务上的项目的时候直接用了之前那个已经访问过了的项目存储在本地会话标识(JSESSIONID),然后用这个JSESSIONID去请求, 发现PC Server 2 服务端(或者tomcat2)里面根本就没有JSESSIONID对应的session会话,所以PC Server 2 服务端(或者tomcat2)重新生成了一个JSESSIONID返回客户端浏览器,PC Server 1 服务端(或者tomcat1)再次请求时, 就会用了新返回的JSESSIONID作为请求的JSESSIONID, 自然在PC Server 1 服务端(或者tomcat1)也找不到这个对应的session会话了;

好了,分析到这里,这个问题也算是搞明白了。那么接下来的问题就是怎么搞定它?

解决方案:

方法一: tomcat6以上, 直接改下conf文件下的context.xml的 context标签, 给每个tomcat的
SessionCookieName=”JSESSIONID_1”设置一个名字(默认是JSESSIONID)

sessionCookieName:用于为此上下文创建的所有会话Cookie的名称。 如果设置,则会覆盖Web应用程序设置的任何名称。 如果未设置,则使用Web应用程序指定的值(如果有),如果Web应用程序未明确设置,则使用名称JSESSIONID。

参考文档:http://tomcat.apache.org/tomcat-7.0-doc/config/context.html

 

方法二:

在tomcat的conf目录下,修改catalina.properties配置:

在catalina.properties加上一句 ,這樣sessionid的名稱就是MYSESSIONID了

具体参考:

/tomcat-6.0.x/java/org/apache/catalina/Globals.java

 

 

本文版权归青年博客所有,转载引用请完整注明以下信息:
本文作者:BaiKeyang
本文地址:部署在多个tomcat同一个项目在同一个浏览器中导致session失效问题 | 青年博客

【上篇】
【下篇】

发表评论

留言无头像?