论坛首页 综合技术论坛

apache 负载均衡 session创建机制(何时创建)

浏览 11806 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-11-07  
因工作需要,配置了apache + 2tomcat 实现负载均衡。现在已经配置成功(可以实现负载均衡,session也能正常复制)。但是问题也来了,我用两种方法登陆,然后登陆的结果却截然不同。
     方法一:先访问登陆页面,然后输入用户名密码。登陆成功,跳转到主页面。然后在主页面随便打开一个连接(或者刷新),都是成功的。
     方法二:直接用url接上用户名以及密码登陆,登陆成功,跳转到主页面。然后在主页面随便打开一个连接(或者刷新),都是不成功的。(服务器有验证session机制如果不存在则跳入另一个页面)。

备注,操作之前浏览器都被我清除掉了cookie。

第二种登陆方法为什么不成功呢,apache session是什么时候创建的啊。

第一次接触这些东西 ,希望能有前辈给予一定的指导,或者给个方向。
   发表时间:2012-11-07  
第二种方法,主要是用于客户端登陆(非网页登陆)。一开始保存认为是session保存出错,后来才发现是登陆之前如果没有session传入服务器端登陆即使成功了,下次登陆用这个session也不行
0 请登录后投票
   发表时间:2012-11-07  
之前没有用apache负载均衡都是可以用的, 但是现在登陆之前必须访问一下登陆页面(其他页面也可以)获取一个sessionid 然后再拿这个sessionid登陆,然后才能正常访问。。。很晕。apache的session机制很special吗?
0 请登录后投票
   发表时间:2012-11-08  
session在打开浏览器时在服务器上创建,在客户端存储sessonid。是不是登陆动作改变了sessionid。或和服务器版本有关。随便说说。
0 请登录后投票
   发表时间:2012-11-08  
coconut_zhang 写道
session在打开浏览器时在服务器上创建,在客户端存储sessonid。是不是登陆动作改变了sessionid。或和服务器版本有关。随便说说。

登陆的时候没有改变sessionid,直接用url登陆然后服务器端是创建了一个session,然后客户端也接受到了,然后再次用这个sessionid到服务器端是验证不通过的。也就是说服务器用这个sessionid找不着之前的session了。很奇怪
0 请登录后投票
   发表时间:2012-11-08  
JSESSIONID=64C202FF5B88C96D7F63C771BEC7D9B6.jvm1;
这是返回来的sessionid 后面的“jvm1“是tomcat服务器名,是apache加上的应该。用于指定访问服务器。
0 请登录后投票
   发表时间:2012-11-08   最后修改:2012-11-08
这边我就附一个请求httphead

request

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset GB2312,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language zh-cn,zh;q=0.5
Connection keep-alive
Host 192.168.3.97
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0.1) Gecko/20100101 Firefox/5.0.1

response

Connection Keep-Alive
Content-Length 615
Content-Type application/json;charset=UTF-8
Date Thu, 08 Nov 2012 01:46:32 GMT
Keep-Alive timeout=5, max=100
Set-Cookie JSESSIONID=98B0039F41001C9CF50D725086C77DC0.jvm2; Path=/XXXX
X-Pad avoid browser bug

然后显示是登陆成功的 并且得到了一个SESSIONID


然后我再次访问一个url XXXXXXXXX

request :

Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Charset GB2312,utf-8;q=0.7,*;q=0.7
Accept-Encoding gzip, deflate
Accept-Language zh-cn,zh;q=0.5
Connection keep-alive
Cookie JSESSIONID=98B0039F41001C9CF50D725086C77DC0.jvm2
Host 192.168.3.97
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0.1) Gecko/20100101 Firefox/5.0.1

response :

Connection Keep-Alive
Content-Length 0
Content-Type text/plain
Date Thu, 08 Nov 2012 01:53:55 GMT
Keep-Alive timeout=5, max=100
Location http://192.168.X.XX/XXX/error.jsp(之前session验证不通过redirect的一个error page)
0 请登录后投票
   发表时间:2012-11-08  
apache的session 必须在后台使用才会创建,否则不创建...如果访问过程中不获得session,那么tomcat不会创建session的....一旦创建后,在集群状态,会拷贝这个session到其他的tomcat
0 请登录后投票
   发表时间:2012-11-08  
charyle 写道
apache的session 必须在后台使用才会创建,否则不创建...如果访问过程中不获得session,那么tomcat不会创建session的....一旦创建后,在集群状态,会拷贝这个session到其他的tomcat

登陆的时候调用了啊,还往添加了用户信息。然后每次访问的时候都有判断是否含有该用户信息。如果不存在就跳转到错误页面。然后我还打了log,好像登陆后session被destroy了。因为登陆后第二次getsession获取的不是第一次创建的session。
0 请登录后投票
   发表时间:2012-11-08   最后修改:2012-11-08
好吧,现象是确认了,但是原因还有待调查。

当登陆request到达服务器的时候然后服务器创建了一个session 记作s1,然后紧接着又创建了一个session 记作s2,然后用户信息都被保存在了s1,下一个request到达时只能够访问到s2,而s2中并没有保存用户信息,最后被filter拦截了下来并重定向到error page

现象是理清楚了,但是现在又搞不清楚为什么会连续创建两个session...

求解啊。。 给点看法,给点方向 也行啊
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics