同一个IP不同端口号使用session失效
背景
我有两个工程projectA、projectB,projectA放在TomcatA中,projectB放在TomcatB中,TomcatA、TomcatB在一台server上。
工程都映射的根路径,不用project名字就可以访问,如下
http://ip1:7777/
http://ip1:8080/
问题
先在7777登录,然后再在8080登录,发现会把7777端口的用户踢下来;再在7777登录,发现会把8080踢下来,一直交替踢……
推测
因为session状态是靠cookie中存储的jsessionid实现的,所以,第一直觉就是jessionid被覆盖了!然后,我做了如下的测试;
8080端口刷新
由于是第一次请求,所以,服务器端返回cookie
名称是JSESSIONID,域名是localhost,路径是/ 

7777端口刷新
请求7777时,居然会带着8080端口的cookie发送,8080的sessionid在7777 tomcat中肯定找不到,所以返回了新的sessionid(名称是JSESSIONID,域名是localhost,路径是/),然后就把8080产生的sessionid覆盖了。 

我们找到问题原因了,由于两个工程的sessionid,名称、域、路径都一样,导致sessionid被覆盖,从而导致session失效;由此也得出cookie是不区分端口的。
解决
基于cookie区分路径、域名、名称,有三个解决方案。
设置域名不同,比如
http://projectA.com:7777/
http://projectB.com:8080/
设置路径不同,设置工程名字,不再映射根路径,比如
http://ip1:7777/projectA
http://ip1:8080/projectB
设置key不同
在Tomcat的server.xml中配置sessionCookieName,只要两个不相同就可以
Tomcat server.xml context配置
相比较而言,首推域名不同、而后路径不同、而后key不同,域名不同最可靠
结论
- cookie不区分端口号
- cookie区分域、路径、名称
更多cookie的特性,请参考cookie入门教程;
转http://blog.csdn.net/wangjun5159/article/details/52399497
同一个IP不同端口号使用session失效的更多相关文章
- 获取本地IP和端口号的指令
ipconfig就可以获取ip 获取端口号的指令: 开始--运行--cmd--输入netstat an(中间有一空格)
- tomcat配置多个项目通过IP加端口号访问
一个tomcat部署多个项目并通过不同的端口访问 第一步:修改 $TOMCAT_HOME\conf\server.xml文件. 复制Service节点,去掉<Connector port=&qu ...
- JavaWeb 获取请求网络协议、IP、端口号、项目根路径
JavaWeb 获取请求网络协议.IP.端口号.项目根路径 CreateTime--2018年6月1日16点32分 Author:Marydon 1.需求 在项目中,需要使用Java向本程序发送r ...
- js 获取请求网络协议、IP、端口号、项目名称
js 获取请求网络协议.IP.端口号.项目名称 CreationTime--2018年6月19日15点54分 Author:Marydon /** * 获取url请求前缀 * @return ht ...
- SQL:安装多个实例,修改实例端口号,和IP加端口号连接实例
sql server 安装第一个实例,默认实例的端口是1433, 一个库中如果有多个实例,从第二个实例开始的端口是动态端口,需要的话,自己手工指定为静态端口,如指定第二个实例为1434 或着随意一个如 ...
- Spring Cloud Eureka 使用外网IP和端口号进行服务注册
应用场景如下: 服务提供方(即要注册到服务中心的服务)的内网地址,外界无法访问(或者使用docker等做了应用端口等的配置),做了IP映射后,公网IP49.10.22.106映射到服务提供方的内网ip ...
- 如何设置让外网通过路由器IP加端口号访问到局域网一台Web服务器
场景描述: 我们局域网内所有主机链接一台路由器,通过设置动态获取IP上网,现在想让一台主机作为Web 服务器,让外网用户通过http://ip:port的方式访问. 1:首先修改Apache的端口号: ...
- 根据IP和端口号异步短时间判断服务器是否链接
/// <summary> /// 短时间判断是否可以连接 /// </summary> /// <param name="ipe"></ ...
- 调试技巧--Windows端口号是否被占用
调试技巧--Windows端口号是否被占用 一.端口概念 10.0.0.0~10.255.255.255,172.16.0.0~172.16.255.255, 192.168.0.0~192.168. ...
随机推荐
- 模块型css样式
<div id="dowork"> <div id="dowork_on">۞作业进行中</div> <div id= ...
- noi题库(noi.openjudge.cn) 1.11编程基础之二分查找T01、02、04
T01 查找最接近的元素 描述 在一个非降序列中,查找与给定值最接近的元素. 输入 第一行包含一个整数n,为非降序列长度.1 <= n <= 100000.第二行包含n个整数,为非降序列各 ...
- [转载]查询json数据结构的8种方式
http://wangxinghaoaccp.blog.163.com/blog/static/1158102362012111812255980/ 你有没有对“在复杂的JSON数据结构中查找匹配内容 ...
- [转载]memset()的效率
http://blog.csdn.net/hackbuteer1/article/details/7343189 void *memset(void *s, int ch, size_t n); 作用 ...
- Python核心编程——Chapter15
正则表达式在脚本语言里是最重要的一部分,这部分的题目真的不容怠慢. 开始这部分的题目的解答! 15.1识别下列字符串:bat,bit,but,hat,hit和hut. >>> imp ...
- 用phpUnit入门TDD
用phpunit实战TDD系列 从一个银行账户开始 假设你已经 安装了phpunit. 我们从一个简单的银行账户的例子开始了解TDD(Test-Driven-Development)的思想. 在工程目 ...
- POJ 3255 Roadblocks (次短路 SPFA )
题目链接 Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her ...
- MongoDB以Windows Service运行
以Administrator身份打开CMD并输入以下命令 cd D:\Developer\MongoDB\mongodb-win32-x86_64-2.4.6\binD:mongod --logpat ...
- 配置replica set的常见问题
总有人问起配置ReplicaSet不成功,总结了一下基本上的可能性就几种,检查步骤如下: 假设三台机器的IP分别是 A: 192.168.1.2 a.test.com B:192.168.1.3 b. ...
- 使用Scrapy命令行工具【导出JSON文件】时编码设置
Windows 10家庭中文版,Python 3.6.4,virtualenv 16.0.0,Scrapy 1.5.0, 使用scrapy命令行工具建立了爬虫项目(startproject),并使用s ...