关于TOMCAT管理session会话的问题。咨询了好多人,还是没有解决。大家帮忙看看。

lgmsyy 2014-12-16 03:19:40
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

...全文
268 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
lgmsyy 2014-12-18
  • 打赏
  • 举报
回复
还有人能帮忙吗?
lgmsyy 2014-12-18
  • 打赏
  • 举报
回复
引用 10 楼 shadowsick 的回复:
[quote=引用 4 楼 lgmsyy 的回复:] [quote=引用 3 楼 zhangjihao 的回复:] 前者是在不同的host里,因此没办共用Session。 后者是在相当的host里。后者并不是别名,只是Context Path
兄弟,我不这不是在同一个host里, <Context path="/A" docBase="D:/Workspaces/A/WebRoot/" debug="0" reloadable="true" /> <Context path="/B" docBase="D:/Workspaces/B/WebRoot/" debug="0" reloadbale="true" /> 是在不同的host里,只是我为了不写多余的[/quote] 你的项目既然部署了两个,而且分别部署了不同的/path路径,你可以火狐看看生成JSESSIONID是在不同的path路径饿,所以他们两个都不是共享的,除非你的两个项目都是读取/这个目录,,,但是他默认是生成项目的path下面啊,,,你大可以用火狐右键查看下[/quote] 以下设置,session的确是在/下统一管理,但是为什么火狐切换标签的时候,会话就是新的呢。我一直认为既然这两个工程都在/下统一管理,切换的时候就不该是新会话啊 每次在火狐切换以下内容的时候,SESSION的会话都是新的。 http://192.168.25.72:99/A1.jsp http://192.168.25.72:92/B1.jsp <Context path="/" docBase="D:/Workspaces/WebRoot/" debug="0" reloadable="true" /> <Context path="/" docBase="D:/Workspaces/WebRoot/" debug="0" reloadbale="true" />
lgmsyy 2014-12-18
  • 打赏
  • 举报
回复
以下设置,session的确是在/下统一管理,但是为什么火狐切换标签的时候,会话就是新的呢。 每次在火狐切换以下内容的时候,SESSION的会话都是新的。 http://192.168.25.72:99/A1.jsp http://192.168.25.72:92/B1.jsp <Context path="/" docBase="D:/Workspaces/WebRoot/" debug="0" reloadable="true" /> <Context path="/" docBase="D:/Workspaces/WebRoot/" debug="0" reloadbale="true" />
小丑哥_V5 2014-12-18
  • 打赏
  • 举报
回复
引用 4 楼 lgmsyy 的回复:
[quote=引用 3 楼 zhangjihao 的回复:] 前者是在不同的host里,因此没办共用Session。 后者是在相当的host里。后者并不是别名,只是Context Path
兄弟,我不这不是在同一个host里, <Context path="/A" docBase="D:/Workspaces/A/WebRoot/" debug="0" reloadable="true" /> <Context path="/B" docBase="D:/Workspaces/B/WebRoot/" debug="0" reloadbale="true" /> 是在不同的host里,只是我为了不写多余的[/quote] 你的项目既然部署了两个,而且分别部署了不同的/path路径,你可以火狐看看生成JSESSIONID是在不同的path路径饿,所以他们两个都不是共享的,除非你的两个项目都是读取/这个目录,,,但是他默认是生成项目的path下面啊,,,你大可以用火狐右键查看下
阿良良木月火 2014-12-18
  • 打赏
  • 举报
回复
结吧
lgmsyy 2014-12-18
  • 打赏
  • 举报
回复
没人帮忙就结贴了啊。
myepoch 2014-12-17
  • 打赏
  • 举报
回复
这样配置多个,因为Context path="/",所以即使多个工程也是在/下统一管理session <Service name="A"> ...... <Context path="/" ...../> ...... </Service > <Service name="B"> ...... <Context path="/" ...../> ...... </Service > 如果在每个工程下,这样配置,那么session的管理是A,B分别进行管理的。 <Context path="/A" ....../> <Context path="/B" ....../>
lgmsyy 2014-12-17
  • 打赏
  • 举报
回复
希望有人帮忙啊?
lgmsyy 2014-12-16
  • 打赏
  • 举报
回复
引用 3 楼 zhangjihao 的回复:
前者是在不同的host里,因此没办共用Session。 后者是在相当的host里。后者并不是别名,只是Context Path
兄弟,我不这不是在同一个host里, <Context path="/A" docBase="D:/Workspaces/A/WebRoot/" debug="0" reloadable="true" /> <Context path="/B" docBase="D:/Workspaces/B/WebRoot/" debug="0" reloadbale="true" /> 是在不同的host里,只是我为了不写多余的
howsun_zh 2014-12-16
  • 打赏
  • 举报
回复
前者是在不同的host里,因此没办共用Session。 后者是在相当的host里。后者并不是别名,只是Context Path
instartime 2014-12-16
  • 打赏
  • 举报
回复
tomcat会话管理是基于Context的
<Context path="/" docBase="D:/Workspaces/B/WebRoot/" debug="0" reloadbale="true
" /> 两个path相同 session会保存在相同位置,比如session.ser下面
lgmsyy 2014-12-16
  • 打赏
  • 举报
回复
有人帮忙吗?

67,514

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧