tomcat session引出的问题

这次碰到一个奇怪的问题,为测试要求,将同一个应用A部署到两个端口的tomcat中,访问地址如下:

http://localhost:10001/A

http://localhost:10002/A

结果单独打开一个没问题,同时打开两个就都运行不了。

查看服务端日志,认定是session过期。

从客户端看,发现这两个A应用的sessionid交替变换!

这才明白,由于session是基于cookie的,cookie按照domain+path来找,是不区分端口号的!所以两个应用的sessionid冲突了!

所以流程就变成了这样:

浏览器请求10001 A-->服务端 java:getSession()->创建cookie[name=sessionid,domain=localhost,path=A,value=c1]

浏览器请求10002 A-->服务端 java:getSession()->创建cookie[name=sessionid,domain=localhost,path=A,value=c2]

浏览器请求10001 A,在http请求头中请求发送cookie[sessionid=c2](这里就冲突了,sessionid被10002 A改了)->服务端 java:getSession()(使用name=c2找不到,于是创建新的)->创建cookie[name=sessionid,domain=localhost,path=A,value=c3]

浏览器请求10002 A,在http请求头中请求发送cookie[sessionid=c3](这里又冲突了,sessionid被10001 A改了)->服务端 java:getSession()(使用name=c3找不到,于是创建新的)->创建cookie[name=sessionid,domain=localhost,path=A,value=c4]

周而复始的互相刷sessionid,两个服务器就在那不停地清过期session,又创建新的session。

这种情况在web应用中一般不会出现,但是在内部测试环境中可能出现!


Total views.

© 2013 - 2024. All rights reserved.

Powered by Hydejack v6.6.1