同IP不同端口Session冲突问题

一个服务器上搭建了多个tomcat或者weblogic,端口不一样,同时启动访问时session丢失。如:A,B两个服务,在浏览器中登录访问A后,当前打开的浏览器上在开一个选项卡访问B服务后,回过来点击访问A时session丢失,需要重新登录A才可以访问。经过资料查找,发现问题是因为:IP相同认为是同一个域,接收了B的set-cookie指令,把对应的cookie内容覆盖了,其中包括jsessionid,造成A的session丢失。 如果IP不同,则不会发生这个问题。IP相同的两个session对应的cookie是一样的,而不幸的是sessionID就保存在cookie中,这样先访问A,再访问B的时候,B的sessionid会覆盖A的sessionid。这个事情没办法解决,所以你不要搞两个端口,最好是搞两个IP。原来都是cookie惹的祸,它不会区分端口,造成这多个站点不断的后来的覆盖前面的,从而造成session的丢失。

解决方法:

方法1:将不同的多个应用服务在不同的虚拟主机中,或者映射不同的IP进行部署。

方法2:对应tomcat服务处理方式:修改coocie的名称保证cookie不重复,即jsessionid的不重称,保证ip相同下sessioncookiename域名不同。

1、tomcat5修改方法

在启动项中增加org.apache.catalina.SESSION_COOKIE_NAME参数

linux
JAVA_OPTS=’-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname‘

win
set JAVA_OPTS=”-Dorg.apache.catalina.SESSION_COOKIE_NAME=yousessionname“

           2、tomcat6和tomcat7修改方法相同

       tomcat增加参数对所有Context生效,影响甚大,所以到以后的版本可以就仅针对Context设置了

在Context容器标签上增加sessionCookieName参数

<Context path=”/” docBase=”webapp” reloadable=”false”sessionCookieName=”yoursessionname”></Context>

3
、weblogic修改方法

设置各个应用使用不同的cookie-name。

weblogic的设置(设置不同的cookie-name):

请在WEB-INF\Weblogic.xml添加如下代码

<session-descriptor>

<cookie-name>JSESSIONID1</cookie-name>

</session-descriptor>

http://blog.csdn.net/isshquery/article/details/8493231

http://blog.163.com/wendy_xiaoyue/blog/static/19040105120111114105829574/

时间: 2024-11-06 10:15:45

同IP不同端口Session冲突问题的相关文章

tomcat与oracle关于8080端口的冲突

http://blog.csdn.net/baidu_24256693/article/details/44863935 由于电脑里同时安装了tomcat与oracle,所以8080的端口是冲突的. 网上有很多文章是介绍修改tomcat的端口的,大概就是把server.xml中的8080端口 改为一个空闲的端口.按照网上的步骤改了以后发现在myclipse中一访问jsp页面 之前修改的server.xml就会自动还原,问题没有解决. 一个更好的方法是修改oracle的端口: 首先用sys登录数据

基于IP、端口和FQDN实现虚拟主机

虚拟主机可以实现多站点共存,当站点的访问量不大时,为了节省资源(IP,物理主机),可以将多个站点运行于一台物理主机. 一.基于IP的虚拟主机: 实现虚拟主机必须先将中心主机的配置注释掉,即禁用中心主机,只需要注释DocumentRoot指令对应的行,而后再定义虚拟主机. 基于IP的虚拟主机要求一台物理机上要有多个IP,每个虚拟主机分别监听在不同IP地址上,访问时可以基于虚拟主机的名称也可以使用IP地址的方式在浏览器界面内访问.比如,两台虚拟主机www.a.org和www.b.net,我们的物理主

JAVA判断ip、端口是否可连接

1.判断ip.端口是否可连接 public static boolean isHostConnectable(String host, int port) { Socket socket = new Socket(); try { socket.connect(new InetSocketAddress(host, port)); } catch (IOException e) { e.printStackTrace(); return false; } finally { try { sock

Java---&gt;判断IP和端口是否可连接

当我们通过IP和端口连接设备时,有时候为了用户体验,我们急需在几秒内给到用户回复信息,而这些就需要一些方法来判断: public void connect(String server, int servPort) throws IOException,UnknownHostException, SocketTimeoutException { InetAddress ad = InetAddress.getByName(server); boolean state = ad.isReachabl

华为核心交换机绑定IP+MAC+端口案例

华为核心交换机绑定IP+MAC+端口案例 1         案例背景 某网络改造项目,核心交换机为华为S5700,接入交换机为不同型号交换机,如下模拟拓扑,客户端接入交换机1通过Access模式与核心交换机连接,该交换机下只有一个Vlan2 192.168.2.0/24:客户端接入交换机2通过Trunk模式与核心交换机连接,该交换机下有俩个Vlan,Vlan3 192.168.3.0/24 Vlan4 192.168.4.0/24,服务器接入交换机通过Access模式与核心交换机连接,该交换机

从Http请求中获取客户端ip和端口

import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; public final class InternetProtocol { private static Logger log = Logger.getLogger(InternetProtocol.class); /**  * 构造函数.  */ private InternetProtocol() { } /**  * 获取客户端IP地址

相同Ip 不同端口配置Nginx反向代理Apache

相同Ip  不同端口 配置Nginx反向代理Apache(就是Nginx跳转到Apache) 在linux 一经搭建好环境  先后安装了Nginx  和Apache 由于 默认端口都是:80 一般客户请求的服务器端口默认为80  所以Nginx作为静态页端口设置:80 Apache设置端口为:8080(在httpd.conf  文件中修改Listen:8080) 如何跳转: 在nginx.conf中 添加 location / { proxy_pass http://202.85.224.166

python - socket - client端指定ip和端口

问题描述: 在设备中有3个NI, ip分别为192.168.1.5/6/7.其中本端192.168.1.6同对端192.168.1.10建立了一个tunnel. 我希望测试tunnel连通性, 对端起一个socket server.本段作为client. 但是如果本端client直接连接,使用的源ip为192.168.1.5,端口随机. 我的迷惑在寻找一个指定ip的函数,在看了python的manual document中socket部分看了一遍后,没有找到这个函数. 随后我意识到我的一个思维误

SQLserver2012 tcp/ip 1433端口问题解决方法

很多MSSQL安装完成后,调用1433(默认端口)是失败的,这边详细介绍下解决方法. 一..我们需要在电脑上开启telnet服务,定位问题需要.在cmd下使用telnet,如果报命令不存在说明没有开启.开启方法如下: 控制面板--"点击打开或关闭Windows功能",会弹出Windows功能对话框,我们在里面找到"Telnet服务器"和"Telne客户端"两项,然后将之前的勾选上即可开启对应服务了,打上勾后,要记得点击底部的确认保存哦,如下图: