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

news2024/11/23 20:27:32

————————————————
版权声明:本文为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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/781523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EXCEL模板如何自定义并使用?

文章目录 0.引言1.新建EXCEL2.EXCEL另存为模板3.使用模板 0.引言 使用Excel模板可以帮助用户更高效地处理和分析大量数据&#xff0c;简化重复任务&#xff0c;并提供清晰直观的数据可视化效果。对于需要频繁进行数据处理和分析的个人或组织来说&#xff0c;使用Excel模板是一个…

半导体自动化专用除静电设备的特点和功能

半导体自动化专用离子风机是一种用于半导体制造过程中的特殊风机设备。它通过产生带电粒子&#xff08;离子&#xff09;的气流来实现静电去除和除尘&#xff0c;以确保半导体制造环境的洁净和无尘。 以下是半导体自动化专用离子风机的一些特点和功能&#xff1a; 1. 静电去除…

听GPT 讲K8s源代码--pkg(七)

k8s项目中 pkg/kubelet/config&#xff0c;pkg/kubelet/configmap&#xff0c;pkg/kubelet/container&#xff0c;pkg/kubelet/cri 这几个目录处理与 kubelet 配置、ConfigMap、容器管理和容器运行时交互相关的功能。它们共同构成了 kubelet 的核心功能&#xff0c;使其能够在 …

在外远程查看家里内网监控

在外远程查看家里内网监控 现代生活节奏紧张&#xff0c;巨大的压力压得我们喘不过气来&#xff0c;因此很多人选择在家里养一只陪伴我们的宠物&#xff0c;用以舒缓紧张的情绪和繁重的压力。但养了这些小家伙后&#xff0c;不在家时又总想随时看看家里小可爱们的情况&#xf…

STL:双端队列容器适配器仿函数优先级队列

deque 双端队列可以在头部和尾部进行插入删除操作与vector相比&#xff0c;头插效率高&#xff0c;不需要搬移元素 与list相比&#xff0c;空间利用率高 deque逻辑上空间是连续的&#xff0c;物理上并不是&#xff0c;是由一段段小空间拼接而成的 双端队列的迭代器比较复杂 cur…

Python爬虫技术及其原理详解

概要 随着互联网的发展&#xff0c;大量的数据被存储在网络上&#xff0c;而我们需要从中获取有用的信息。Python作为一种功能强大且易于学习的编程语言&#xff0c;被广泛用于网络爬虫的开发。本文将详细介绍Python爬虫所需的技术及其原理&#xff0c;并提供相关的代码案例。 …

Python—数据结构(一)

先放一张自己学习和整理归纳的思维导图&#xff0c;以便让大家都知道我自己的整体学习路线。 数据结构的学习路上内容枯燥&#xff0c;但坚持下来一定有很大的收获&#xff01;加油&#x1f4aa;&#x1f3fb;&#xff01; 数据结构 数据的概念数据元素&#xff1a; 若干基本…

php基于redis处理session的方法

php基于redis处理session的方法 一个基于redis的处理session的方法&#xff0c;如下&#xff1a; class Session_custom { private $redis; // redis实例 private $prefix sess_; // session_id前缀 // 会话开始时&#xff0c;会执行该方法&#xff0c;连接redis服务器 p…

【JVM】JVM执行流程 JVM类加载 垃圾回收机制等

目录 &#x1f337;1、JVM是什么&#xff1f; &#x1f337;2、JVM的执行流程&#xff08;能够描述数据区5部分&#xff09; &#x1f337;3、JVM类加载过程 &#x1f337;4、双亲委派机制&#xff1a;描述类加载的过程 问题1&#xff1a;类加载器 问题2&#xff1a;什么…

前端知识点视频补充

使用工具&#xff1a; Vscode使用&#xff1a; 需要下载插件&#xff1a;open in browser。这个插件可以快速打开浏览器。 选择文件夹有两种方式&#xff1a;选择打开文件、拖拽方式&#xff08;这种最方便&#xff09; 快捷键&#xff1a;快速生成Htm结构文件&#xff1a;…

msvcr100.dll丢失的解决方法

在解决msvcr100.dll丢失问题前&#xff0c;给大家介绍一下为什么msvcr100.dll会丢失 msvcr100.dll文件丢失的原因可能有多种。以下是一些常见的原因&#xff1a; 文件被误删&#xff1a;有时候&#xff0c;用户可能会误删除msvcr100.dll文件&#xff0c;导致其丢失。 文件损…

蓝桥杯专题-真题版含答案-【生命之树】【消除尾一】【密码脱落】【生日蜡烛】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

用户管理功能

后端 # 获取用户列表 bp.get("/user/list") def user_list():users UserModel.query.order_by(UserModel.join_time.desc()).all()user_list [user.to_dict() for user in users]return restful.ok(datauser_list)# 用户是否可用 bp.post("/user/active"…

json-server提供json接口服务--示例版本

一、基于以下数据做接口常用功能的查询 1.1启动服务并且创建数据库文件&#xff0c;对外提供文件如下&#xff1a; {"posts": [{"author": "杰瑞","id": 1},{"id": 2,"title": "json-server","au…

通过Jmeter压测存储过程

一、存储过程准备&#xff1a; 1、建立一个空表&#xff1a; 1 CREATE TABLE test_data ( id NUMBER, name VARCHAR2(50), age NUMBER ); 2、建立一个存储过程&#xff1a; 1 2 3 4 5 6 7 8 9 CREATE OR REPLACE PROCEDURE insert_test_data (n IN NUMBER) AS BEGIN --E…

顺丰基于 Flink CDC + Hudi 推进实时业务落地

摘要&#xff1a;本文整理自大数据研发高级工程师唐尚文&#xff0c;在 Flink Forward Asia 2022 数据集成专场的分享。本篇内容主要分为三个部分&#xff1a; 应用场景 实践与优化 未来规划 点击查看原文视频 & 演讲PPT 一、应用场景 1.1 顺丰集团业务概览 顺丰除了大家…

LeetCode153.Find-Minimum-In-Rotated-Sorted-Array<寻找旋转排序数组中的最小值>

题目&#xff1a; 寻找旋转排序数组中的最小值 思路&#xff1a; (1) sort 排序 (2) 循环找最小数。 代码是&#xff1a; //code//1 class Solution { public:int findMin(vector<int>& nums) {int len nums.size() - 1;sort(nums.begin(),nums.end());int fir…

go学习 模块与包 - Init函数 - 如何导入第三方包 - 切片与数组的数据传递方式 - go中文件的读写

目录 包&#xff08;package&#xff09;是组织和复用代码的基本单元。 包的种类&#xff1a; 包的导入 包的组成 如下两个文件中定义了A变量和 sc_num变量&#xff0c;他们的首字母开头分别为大写和小写&#xff0c;因此可以说明A变量是公有变量&#xff0c;而sc_num是私…

【unity之IMGUI实践】通用API实现抽象行为封装【五】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

【数字图像处理与应用】模板匹配

【数字图像处理与应用】模板匹配 题目模板匹配原理Matlab代码实现算法介绍显示图像的匹配结果 (最匹配的一个)MATLAB实现运行结果图像的相关值结果&#xff1a;在原图像上绘制检测到的目标位置&#xff1a;显示检测到的目标坐标&#xff1a; 显示图像的匹配结果 (最匹配的三个&…