关于TOMCAT管理session会话的有关问题。咨询了好多人,还是没有解决。大家帮忙看看
关于TOMCAT管理session会话的问题。咨询了好多人,还是没有解决。大家帮忙看看。
A1.jsp
A2.jsp
B1.jsp
B2.jsp
在tomcat的server.xml中配置如下
server.xml配置如下
打开IE8或者火狐,开两个标签,分别执行
http://192.168.25.72:99/A1.jsp
http://192.168.25.72:92/B1.jsp
在来回切换标签的过程中,发现。
A和B只要切换了标签,那么A,B应用SESSION会话分别是新的会话。
但是在server.xml中配置更改为(分别加了别名)
<Context path="/A" docBase="D:/Workspaces/A/WebRoot/" debug="0" reloadable="true" />
<Context path="/B" docBase="D:/Workspaces/B/WebRoot/" debug="0" reloadbale="true" />
打开IE8或者火狐,开两个标签,分别执行
http://192.168.25.72:99/A/A1.jsp
http://192.168.25.72:92/B/B1.jsp
在来回切换标签的过程中,发现A,B应用SESSION会话分别是旧的会话。
请问这是为什么呢。为什么加了别名TOMCAT对SESSION的管理就不一样了呢?
注意:以上基于同一个TOMCAT和server.xml
------解决思路----------------------
这样配置多个,因为Context path="/",所以即使多个工程也是在/下统一管理session
<Service name="A">
......
<Context path="/" ...../>
......
</Service >
<Service name="B">
......
<Context path="/" ...../>
......
</Service >
如果在每个工程下,这样配置,那么session的管理是A,B分别进行管理的。
<Context path="/A" ....../>
<Context path="/B" ....../>
------解决思路----------------------
你的项目既然部署了两个,而且分别部署了不同的/path路径,你可以火狐看看生成JSESSIONID是在不同的path路径饿,所以他们两个都不是共享的,除非你的两个项目都是读取/这个目录,,,但是他默认是生成项目的path下面啊,,,你大可以用火狐右键查看下
A1.jsp
<a href="A2.jsp""> clienk web </a>
<%
System.out.println("A1 SESSION:"+session.getId());
if(session.isNew()){
System.out.println("A1 is new session");
session.setAttribute("ssoSid", "hello");
}else{
System.out.println("A1 is old session");
}
%>
A2.jsp
web2
<%
System.out.println("A2 SESSION:"+session.getId());
if(session.isNew()){
System.out.println("A2 is new session");
}else{
System.out.println("A2 is old session");
}
String ssoSid = (String)session.getAttribute("ssoSid");
System.out.println("A ssoSid:"+ssoSid);
%>
B1.jsp
<a href="B2.jsp""> client use </a>
<%
System.out.println("B1 SESSION:"+session.getId());
if(session.isNew()){
System.out.println("B1 is new session");
session.setAttribute("ssoSid", "LGM");
}else{
System.out.println("B1 is old session");
}
%>
B2.jsp
hello user2
<%
System.out.println("B2 SESSION:"+session.getId());
if(session.isNew()){
System.out.println("B2 is new session");
}else{
System.out.println("B2 is old session");
}
String ssoSid = (String)session.getAttribute("ssoSid");
System.out.println("B ssoSid:"+ssoSid);
%>
在tomcat的server.xml中配置如下
server.xml配置如下
<Service name="A">
<Connector port="99".../>
......
<Engine name="A" defaultHost="localhost">
......
<Host name="localhost" appBase="A" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="/" docBase="D:/Workspaces/A/WebRoot/" debug="0" reloadable="true" />
</Host>
</Engine>
</Service>
<Service name="B">
<Connector port="92" .../>
......
<Engine name="B" defaultHost="localhost">
......
<Host name="localhost" appBase="B" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="/" docBase="D:/Workspaces/B/WebRoot/" debug="0" reloadbale="true" />
</Host>
</Engine>
</Service>
打开IE8或者火狐,开两个标签,分别执行
http://192.168.25.72:99/A1.jsp
http://192.168.25.72:92/B1.jsp
在来回切换标签的过程中,发现。
A和B只要切换了标签,那么A,B应用SESSION会话分别是新的会话。
但是在server.xml中配置更改为(分别加了别名)
<Context path="/A" docBase="D:/Workspaces/A/WebRoot/" debug="0" reloadable="true" />
<Context path="/B" docBase="D:/Workspaces/B/WebRoot/" debug="0" reloadbale="true" />
打开IE8或者火狐,开两个标签,分别执行
http://192.168.25.72:99/A/A1.jsp
http://192.168.25.72:92/B/B1.jsp
在来回切换标签的过程中,发现A,B应用SESSION会话分别是旧的会话。
请问这是为什么呢。为什么加了别名TOMCAT对SESSION的管理就不一样了呢?
注意:以上基于同一个TOMCAT和server.xml
------解决思路----------------------
这样配置多个,因为Context path="/",所以即使多个工程也是在/下统一管理session
<Service name="A">
......
<Context path="/" ...../>
......
</Service >
<Service name="B">
......
<Context path="/" ...../>
......
</Service >
如果在每个工程下,这样配置,那么session的管理是A,B分别进行管理的。
<Context path="/A" ....../>
<Context path="/B" ....../>
------解决思路----------------------
你的项目既然部署了两个,而且分别部署了不同的/path路径,你可以火狐看看生成JSESSIONID是在不同的path路径饿,所以他们两个都不是共享的,除非你的两个项目都是读取/这个目录,,,但是他默认是生成项目的path下面啊,,,你大可以用火狐右键查看下