理解误区:以前刚学习Servlet的时候认为开启一个新的会话的时候就是在一个session下面,服务器会存储SESSION的信息,客户端浏览器会存储cookie的信息,浏览器关闭后session就销毁,其实不是的,session除了手动销毁和配置了默认的时间去销毁外,仍旧还是存储在服务器端,只是新的请求中cookie信息销毁了,服务器会重新创建一个Sessionid存储在cookie中,根据现有的session去找之前的信息已经匹配不上了,登录校验就是根据这个实现的;
- 当一个Session开始时,Servlet容器会创建一个HttpSession对象,那么在HttpSession对象中,可以存放用户状态的信息
- Servlet容器为HttpSession对象分配一个唯一标识符即Sessionid,Servlet容器把Sessionid作为一种Cookie保存在客户端的 浏览器 中
- 用户每次发出Http请求时,Servlet容器会从HttpServletRequest对象中取出Sessionid,然后根据这个Sessionid找到相应的HttpSession对象,从而获取用户的状态信息
总结
当在同一个浏览器中同时打开多个标签,发送同一个请求或不同的请求,仍是同一个session;(跨应用程序的session共享是不一样的)
跨应用程序的session共享
按照Servlet规范,session的作用范围应该仅仅限于当前应用程序下,不同的应用程序之间是不能够互相访问对方的session的。各个应用服务器从实际效果上都遵守了这一规范,但是实现的细节却可能各有不同,因此解决跨应用程序session共享的方法也各不相同。
当不在同一个窗口中打开相同的浏览器时,发送请求,仍是同一个session;
当使用不同的浏览器时,发送请求,即使发送相同的请求,是不同的session;
当把当前某个浏览器的窗口全关闭,再打开,发起相同的请求时,就是本文所阐述的,是不同的session,但是它和session的生命周期是没有关系的.