1、A机 和 B机 做了集群(Tomcat的) [两台不同的物理电脑,1笔记本,1台台式机,两个电脑用心跳方式连接]
2、用A机,IE浏览器,访问叶面 http://localhost/setServer.jsp
3、A机,Tomcat控制台打印出了"Say:Server.Jsp"
4、关闭A机Tomcat!
5、用B机,IE浏览器,访问页面 http://localhost/getServer.jsp
6、A机,Tomcat控制台打印出了"Say:Form Server A"
setServer.jsp
<%
System.out.println("Say:Server.Jsp");
session.setAttribute("getValue","Say:Form Server A");
%>
getServer.jsp
<%
System.out.println(session.getAttribute("getValue"));
%>这是我的测试结果:可是我不明白根据我看的文档资料
类似我这样写的session保持,是要借助浏览器的会话cookie的,也就是说如果浏览器关闭以后,服务器session虽然
没有消失。但是由于浏览器cookie消失了,所以无法让浏览器和服务器早交互了!但是我这个现象要怎么解释啊?
2、用A机,IE浏览器,访问叶面 http://localhost/setServer.jsp
3、A机,Tomcat控制台打印出了"Say:Server.Jsp"
4、关闭A机Tomcat!
5、用B机,IE浏览器,访问页面 http://localhost/getServer.jsp
6、A机,Tomcat控制台打印出了"Say:Form Server A"
setServer.jsp
<%
System.out.println("Say:Server.Jsp");
session.setAttribute("getValue","Say:Form Server A");
%>
getServer.jsp
<%
System.out.println(session.getAttribute("getValue"));
%>这是我的测试结果:可是我不明白根据我看的文档资料
类似我这样写的session保持,是要借助浏览器的会话cookie的,也就是说如果浏览器关闭以后,服务器session虽然
没有消失。但是由于浏览器cookie消失了,所以无法让浏览器和服务器早交互了!但是我这个现象要怎么解释啊?
配上以后它周期同步两台机器所有的session对象。所以就出问题了?这种集群方式在流量大的时候就死定了。
我的问题不在这里!我的问题是:session的机制是跟浏览器cookie有关的!(cookie有两种一种是,浏览器的会话cookie在内存。一种是物理文件cookie在硬盘)http是无状态协议
为了能和用户保持交互。在浏览器和服务器有一个互相的认知!session就是利用浏览器cookie来实现的!
但是我已经在A机上关闭了浏览器。所以A机器的浏览器cookie应该消失了!
但是我在b机直接session.getA...竟然可以得到我在A机器设置的数值!
因为每一个用户都有独立的session所以我session.getA...的时候应该把我的浏览器上的sessionID发给了服务器
然后服务器根据这个id去找这个session SET进去的数值!可是我B机器没有这个id怎么竟然得到了a机设置进去的数值的啊
我没看到你关闭浏览器的步骤
---------------------
我是没有关闭A机的浏览器!但是这跟A机浏览器已经没有关系了啊。我去了b机的ie访问这个页面。跟a机的ie有什么关系啊
我在重复一下我的步骤啊
1、A机 和 B机 做了集群(Tomcat的) [两台不同的物理电脑,1笔记本,1台台式机,两个电脑用心跳方式连接]
2、分别启动A机 , B机的Tomcat.两机Tomcat控制台提示信息表示。两机集群没有问题!
3、用A机,IE浏览器,访问叶面 http://localhost/setServer.jsp
4、A机,Tomcat控制台打印出了"Say:Server.Jsp"
5、关闭A机Tomcat!
6、用B机,IE浏览器,访问页面 http://localhost/getServer.jsp
7、B机,Tomcat控制台打印出了"Say:Form Server A" setServer.jsp
<%
System.out.println("Say:Server.Jsp");
session.setAttribute("getValue","Say:Form Server A");
%>
getServer.jsp
<%
System.out.println(session.getAttribute("getValue"));
%>
如果IE不是当前会话的那么服务器就会重新给你建一个会话,
也就是说如果你的当前IE窗口不是之前会话的窗口或它的子窗口,那么服务器就认为它是一个新的会话,
它无法确定你是之前的哪个会话,除非自己写程序来保持会庆,也就是sessionId,不过不同的服务大有不同的session的传递方式.
集群工具会把A机的session复制到B机服务器上,
当客户访问的时候就人自动转到B机,
这和客户端是没有关系的,
有关系的时当前客户端是否在之前存在会话,如果没有因为A机已经关闭所以集群工具只能将访问转到B机,在B机新建一个会话。
所以我们推理一下,
2、用A机,IE浏览器,访问叶面 http://localhost/setServer.jsp
就会在服务器建立一个会话,
3、A机,Tomcat控制台打印出了"Say:Server.Jsp"
说明集群转向的是A机, 5、用B机,IE浏览器,访问页面 http://localhost/getServer.jsp
也会和上面打印的相同,
6、A机,Tomcat控制台打印出了"Say:Form Server A" 这里不明白,在第4点不是4、关闭A机Tomcat!
怎么还能打印.....所以是不是还没什么没说,还是本人偶笨没理解您的话....
5、用B机,IE浏览器,访问页面 http://localhost/getServer.jsp
是新建立会话,出不是A机上的会话