每当客户端打开新的web浏览器时,tomcat容器将客户机视为新客户机,和返回客户端的新会话id。
如果客户端打开5个web浏览器,容器就会创建5个唯一的会话id,但在我的示例中,getSession(true)方法会返回每个新客户端的旧会话id。
例如,如果我为客户端调用getSession()方法,然后容器为客户端生成B0B7945E63D00701E19FA6E9A4909B07会话id,当第二个客户端出现时,我再次调用getSession()方法,但这次getSession()方法返回为客户端方法生成的旧会话id。
因此,我在客户机1的会话id中设置的数据也会反映到客户端2,如果有5个或更多的客户端来,那么getSession()将返回为客户端1生成的旧会话id给所有客户机。
发布于 2015-05-18 14:56:36
默认配置是在服务器和浏览器之间的cookie中交换会话id。因为HTTP本质上是一个非连接协议,而会话只是模拟连接的丑陋(*)攻击。
如果单个客户机(机器)打开5个浏览器应用程序或同一浏览器的windows ,则所有客户端(机器)都将共享相同的cookie包。也将分享同一个会议!有人告诉我,最近的一些浏览器实际上试图解决这个问题,但我从未进行过测试。
当我必须从一台机器测试不同的会话时,我使用firefox、IE和Chrome来拥有不同的cookie包。
(*)丑陋只是我的观点,但事实是,服务器无法可靠地知道客户机是否关闭了浏览器,您必须使用复杂的模式来避免会话劫持(只要您要求,ok安全框架可以为您做到这一点)。
https://stackoverflow.com/questions/30304416
复制相似问题