首页 > 系统相关 >Linux命令-按照与使用(17)(转载)解决同一台服务器上部署多个tomcat的同一个项目session冲突问题

Linux命令-按照与使用(17)(转载)解决同一台服务器上部署多个tomcat的同一个项目session冲突问题

时间:2023-07-19 14:33:26浏览次数:39  
标签:tomcat TomcatA 项目 projectTest JSESSIONID session 17 Linux TomcatB

————————————————
版权声明:本文为CSDN博主「strive_or_die」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/strive_or_die/article/details/103191546
————————————————
版权声明:本文为CSDN博主「阿文_ing」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41793064/article/details/107415290

一、同一台服务器,多个Tomcat,部署同一个项目session覆盖的问题 (参考,没有使用context.xml文件修改方案)

最近一段时间,在开发环境部署多套项目,其中一套用于对外调试,一套内部开发测试,限于资源有限,也使为了方便管理,就在同一台机器上创建了两个Tomcat。所以就有了如题目所描述的场景,一台服务器中多个Tomcat,而且Tomcat里部署的项目都是一样的。

遇到的问题
  简单描述一下,那台机器中服务器和项目的配置,TomcatA和TomcatB,里面同事部署了projectTest项目。配置好了后,开始用得好好的,偶然发现打开一个浏览器,先访问一下TomcatA的projectTest,登录进去了,然后开启一个新的标签页,访问TomcatB的projectTest,然后再访问TomcatA的projectTest,会发现需要重新登录了。这个过程可以如下步骤表述:

1.访问TomcatA的projectTest项目,登录进去。

2.同一个浏览器,新开一个标签页,访问TomcatB的projectTest项目。

3.回到TomcatA的projectTest项目刷新一下,会发现需要重新登录。

其实在在第2步操作时,session就已经发生了覆盖了。

发生session覆盖的原因
  因为是同一台机器,所以IP是一样的,项目也是一样,只有端口是不同的;在步骤1,访问TomcatA的项目时,会返回一个JSESSIONID给客户端,客户端会根据IP+项目名作为一个站点的标识,与cookies中的JSESSIONID关联起来。当你向TomcatB的项目发起访问时,浏览器根据你访问的URL,解析得到你的IP+项目名,找到TomcatA关联的cookies,也发给了TomcatB,而TomcatB根本没有这个JSESSIONID,所以会重新生成一个返回给浏览器,那么新的JSSESSIONID的cookies又会跟IP+项目名关联;同理,此时的JSESSIONID已经不是TomcatA最初的JSESSIONID了,所以第3步访问TomcatA的项目,会导致发现session丢失或者说被覆盖了的现象。

解决方案
  直接改下conf文件下的context.xml的context标签, 修改Tomcat返回的JSESSIONID的名字,如:SessionCookieName=”JSESSIONID_1”,设置一个名字(默认是JSESSIONID) ;那么上面例子中,我们将TomcatA改为SessionCookieName=”JSESSIONID_A”,TomcatB改为SessionCookieName=”JSESSIONID_B”;,这个的原理就是通过让每个Tomcat的为项目返回的SessionID的名字不重复,所以即使TomcatA的JSESSIONID_A发往TomcatB,TomcatB没有这个JSESSIONID_A,它会产生一个JSESSIONID_B,此时返回给浏览器的JSESSIONID_B因为与JSESSIONID_A不同而不会发生覆盖,因此可以解决该问题。


二、解决同一台服务器上部署多个项目session冲突问题 (使用server.xml文件修改方案)

由于一台服务器上使用Tomcat部署多个WEB项目,而项目因为用到框架都是一样的,导致同时运行,session相互冲突,这个登录后,那个就得重新登录,造成了使用不方便,解决办法如下:

server.xml文件,host的标签页下,加上Context标签(sessionCookieName="自己的项目名称"),标签内容可以这样写:

 <Context path="" docBase="ROOT" sessionCookieName="自己的项目名称"></Context>

如下图
conf/server.xml文件
sessionCookieName="自己的项目名称"

对上面几个属性做一些说明:

path属性指的是项目的名称,如果是直接访问URL,这里填写空就可以;

docBase属性指的项目的名称,可以自定义也可以为ROOT,那就指明了是webapps下的ROOT;

sessionCookieName属性是这里需要注意的,指定了当前项目的session的唯一标识,各个名称自定义,为了不与其他的项目冲突。


三、客户端通过F12查看Cookie

1、通过应用>Cookie

2、网络>Cookie

标签:tomcat,TomcatA,项目,projectTest,JSESSIONID,session,17,Linux,TomcatB
From: https://www.cnblogs.com/muzlei/p/17565482.html

相关文章

  • Linux系统Apache添加监听端口后无法启动服务并报错:Job for httpd.service failed beca
    导言:这是SELinux安全机制导致的。解决方法:1.查看当前httpd端口#semanageport-l|grephttp2.将对应端口加入SELinux,以8068为例#semanageport-a-thttp_port_t-ptcp80683.再次查看#semanageport-l|grephttp4.重启Apache服务#systemctlrestarth......
  • 7/17dp复健
    7/17ValidBitonicPermutations题意:构建一个以\(k(2\lek\len-1)\)为峰值的单峰序列\(a\),使得在\(i,j\)位置上的数为\(x,y\),问在模\(10^{9}+7\)下有多少种序列。多测\(t,n\le100\)设\(x,y\)为两个特定值的位置,\(nx,ny\)为两个特定的值。枚举峰值可能在......
  • docker linux开机启动
    DockerLinux开机启动在Linux系统中,可以通过配置Docker来实现在开机时自动启动Docker服务。这样可以确保Docker服务在系统启动后自动运行,方便管理和使用Docker容器。本文将介绍如何设置Docker在Linux开机时自动启动,并提供相应的代码示例。方法一:使用systemd管理器systemd是一个L......
  • Linux
    目录linux基础第1节1.1目录1.2shell是什么1.3linux命令1.4文件类型1.5ls第2节2.1alias别名机制2.2du磁盘使用情况2.3mkdir创建文件2.4touch2.5copy备份2.6find查找文件linux基础第1节1.1目录去往当前目录家目录cd~cdcd/root/cd/进......
  • tomcat中conf目录中一些文件介绍
     tomcat中conf目录中一些文件说明server.xml文件:该文件用于配置和server相关的信息,比如tomcat启动的端口号、配置host主机、配置Contextweb.xml文件:部署描述文件,web.xml文件有两部分:Servlet类定义和Servlet映射定义。这个web.xml中描述了一些默认的servlet,部署每个webapp时......
  • linux压缩和解压
    1.压缩格式ziplinux,windows,MacOS7zipwindowsrarwindowstarlinux,MacOSgziplinux,MacOS.tar格式:简单的将文件组装到一个文件中,没有太多文件体积的减少,只是简单的封装.gz格式:使用gzip压缩算法将文件压缩到一个文件内,可以极大的减少压缩后的体积2.压缩命令针对.tar.g......
  • tomcat中各目录文件用途
     查看tomcat目录   各目录文件用途 tomcat     |---bin:存放启动和关闭tomcat执行脚本;     |---conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml;     |---lib:存放Tomcat运行需要的库文件(jar),包含Tomcat使用的jar文件。unix平......
  • Linux配置IP地址
    目录修改配置文件重启网络服务相关命令查看路由状态route-n查看IP地址ipa查看网卡参数ethtoolens33查看DNS解析nslookup修改配置文件vi/etc/sysconfig/network-scripts/ifcfg-ens33配置解释TYPE=Ethernet#网卡类型是以太网PROXY_METHOD=noneBROWSER_ONLY=noBOO......
  • Linux基础命令记录
    基础命令详解1.cd:切换工作路径#cd默认回到宿主目录下#cd /opt切换到根下opt下2.ifconfig:查看更改ip地址安装包为:net-tools启动关闭指定网卡#ifconfigeth0down#ifconfigeth0up添加/删除临时子网卡#ifconfigaddens3410.254.254.74#ifcon......
  • Linux Lite 6.6发行版的候选版(RC)可供公众测试
    Linux Lite的创建者JerryBezencon近日宣布,即将推出的LinuxLite6.6发行版的候选版(RC)开发版本可供公众测试。LinuxLite6.6仍然基于Ubuntu22.04.2LTS(JammyJellyfish)长期支持的操作系统系列,由长期支持的Linux5.15LTS内核系列提供动力,并采用Xfce4.16桌面环境系列,承......